{"record":{"id":"9b970074b28be7aa","repo":"apache/seatunnel","slug":"configured-the-props-named-changelog-producer-wh","errorCode":null,"errorMessage":"configured the props named 'changelog-producer' which is not compatible with the options in table , so it will use the table's 'changelog-producer'","messagePattern":"configured the props named 'changelog-producer' which is not compatible with the options in table , so it will use the table's 'changelog-producer'","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/PaimonSinkWriter.java","lineNumber":146,"sourceCode":"            Table paimonFileStoretable,\n            String commitUser,\n            JobContext jobContext,\n            PaimonSinkConfig paimonSinkConfig,\n            PaimonHadoopConfiguration paimonHadoopConfiguration,\n            PaimonBucketAssignerFactory paimonBucketAssignerFactory) {\n        this.sourceTableSchema = catalogTable.getTableSchema();\n        this.seaTunnelRowType = this.sourceTableSchema.toPhysicalRowDataType();\n        this.jobContext = jobContext;\n        this.paimonTablePath = catalogTable.getTablePath();\n        this.paimonCatalog = PaimonCatalog.loadPaimonCatalog(readonlyConfig);\n        this.paimonCatalog.open();\n        this.paimonTable = (FileStoreTable) paimonFileStoretable;\n        this.commitUser = commitUser;\n        CoreOptions.ChangelogProducer changelogProducer =\n                this.paimonTable.coreOptions().changelogProducer();\n        if (Objects.nonNull(paimonSinkConfig.getChangelogProducer())\n                && changelogProducer != paimonSinkConfig.getChangelogProducer()) {\n            log.warn(\n                    \"configured the props named 'changelog-producer' which is not compatible with the options in table , so it will use the table's 'changelog-producer'\");\n        }\n        this.rowAssignerChannelComputer =\n                new RowAssignerChannelComputer(\n                        paimonTable.schema(), context.getNumberOfParallelSubtasks());\n        rowAssignerChannelComputer.setup(context.getNumberOfParallelSubtasks());\n        this.paimonBucketAssignerFactory = paimonBucketAssignerFactory;\n        this.parallelism = context.getNumberOfParallelSubtasks();\n        this.taskIndex = context.getIndexOfSubtask();\n        this.paimonSinkConfig = paimonSinkConfig;\n        this.sinkPaimonTableSchema = this.paimonTable.schema();\n        this.ioManager =\n                (IOManagerImpl)\n                        IOManager.create(splitPaths(paimonSinkConfig.getChangelogTmpPath()));\n        this.newTableWrite();\n        BucketMode bucketMode = this.paimonTable.bucketMode();\n        // https://paimon.apache.org/docs/master/primary-key-table/data-distribution/#dynamic-bucket\n        // When you need cross partition upsert (primary keys not contain all partition fields),","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/PaimonSinkWriter.java#L128-L164","documentation":"PaimonSinkWriter compares the 'changelog-producer' value configured in the sink options against the one already set on the target Paimon table. When both are present and differ, the table's setting wins; this warning tells you your sink-level option was ignored.","triggerScenarios":"PaimonSinkWriter constructor with a PaimonSinkConfig that has changelogProducer non-null while the existing FileStoreTable's CoreOptions.changelogProducer() returns a different enum value.","commonSituations":"Job config says 'input' or 'lookup' but the table was created with 'none' or 'full-compaction'; ALTER of table options after job config was written; reusing a copy-pasted sink config across tables with different changelog producers.","solutions":["Remove the sink 'changelog-producer' option and rely on the table's setting.","Or change the table to match: ALTER TABLE ... SET ('changelog-producer' = 'your-value') or recreate the table.","Keep table and job configs in sync in your deployment templates to silence the mismatch.","Only proceed ignoring it if the table's value is the intended one — otherwise the write path may lack the changelog you expect."],"exampleFix":"// before\nsink { Paimon { changelog-producer = input ... } }  // table has changelog-producer = none\n// after\nALTER TABLE my_table SET ('changelog-producer' = 'input');\n// or delete the line from the sink config","handlingStrategy":"validation","validationCode":"String tableProducer = tableOptions.get(\"changelog-producer\");\nString sinkProducer = sinkConfig.getChangelogProducer();\nif (tableProducer != null && sinkProducer != null && !tableProducer.equals(sinkProducer)) throw new IllegalStateException(\"changelog-producer mismatch\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep table options and sink config generated from one source of truth","Drop sink-level changelog-producer unless overriding intentionally","Review table DDL after schema drift"],"tags":["paimon","configuration","conflict"],"backgroundTag":"conflicting-config-options","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}