如何修改Kafka JDBC Sink连接器DLQ主题的默认保留时间
不存在可直接在JDBC Sink连接器配置中修改DLQ主题保留时间的内置属性,你之前尝试的所有参数不生效,核心原因是Kafka Connect框架自动创建DLQ主题的逻辑,仅支持读取errors.deadletterqueue.topic.name、errors.deadletterqueue.topic.replication.factor这两个主题相关的配置,其余主题级参数(包括保留时间)默认直接沿用集群broker的默认主题配置,不会识别你测试的那些自定义参数。
你尝试配置的topic.creation.default.*系列参数,仅对源连接器(Source Connector)自动创建业务输出主题的场景生效,完全不适用于Sink连接器DLQ主题的创建逻辑;其余带admin.*前缀的参数是Kafka Connect内置Admin客户端的通用连接配置,和主题创建时的属性配置无关,自然不会生效。
可行的解决方法
方案1:提前手动创建DLQ主题(最稳妥)
在启动JDBC Sink连接器之前,手动创建名为error_topic的主题,创建时直接指定1天的保留时间,Kafka Connect检测到DLQ主题已存在时,不会重复创建主题,会直接复用你提前配置好保留策略的主题。
参考创建命令:kafka-topics.sh --create --bootstrap-server <替换为你的集群broker地址> \ --topic error_topic \ --partitions <替换为你需要的分区数> \ --replication-factor <替换为集群匹配的副本因子> \ --config retention.ms=86400000注:你当前配置的
errors.deadletterqueue.topic.replication.factor=-1是Kafka 2.4+版本支持的合法配置,代表使用集群默认副本因子,手动建主题时直接填写实际使用的副本因子数值即可。方案2:直接修改已存在DLQ主题的配置(无需重启连接器)
如果error_topic已经被Connect自动创建,不需要删除主题或重启连接器,直接通过kafka-configs命令动态修改主题保留时间即可,配置实时生效:kafka-configs.sh --alter --bootstrap-server <替换为你的集群broker地址> \ --entity-type topics \ --entity-name error_topic \ --add-config retention.ms=86400000修改后可以通过以下命令验证配置是否生效:
kafka-configs.sh --describe --bootstrap-server <替换为你的集群broker地址> \ --entity-type topics \ --entity-name error_topic
补充说明:如果使用的是云厂商托管版Kafka Connect服务,可以查看对应服务的控制台是否提供了DLQ主题配置的扩展入口,开源版Kafka Connect截至当前最新版本,仍未支持在连接器配置中直接自定义DLQ主题的保留时间等非核心参数。
内容的提问来源于stack exchange,提问作者Pragya Rai

