Kafka MirrorMaker2日志报TopicExistsException警告是否正常?如何规避?
问题
使用Kafka MirrorMaker 2实现两个Kafka集群间的数据复制,启动服务一段时间后,connect.logs中针对每个主题都出现了多条如下警告日志:
[2023-06-19 03:00:16,712] WARN [MirrorSourceConnector|worker] Could not create topic trigger_process. (org.apache.kafka.connect.mirror.MirrorSourceConnector:381) java.util.concurrent.CompletionException: org.apache.kafka.common.errors.TopicExistsException: Topic 'test_topic' already exists. at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331) at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088) at org.apache.kafka.common.internals.KafkaCompletableFuture.kafkaCompleteExceptionally(KafkaCompletableFuture.java:49) at org.apache.kafka.common.internals.KafkaFutureImpl.completeExceptionally(KafkaFutureImpl.java:130) at org.apache.kafka.clients.admin.KafkaAdminClient$1.handleResponse(KafkaAdminClient.java:1629) at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.handleResponses(KafkaAdminClient.java:1268) at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.processRequests(KafkaAdminClient.java:1421) at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1344) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: org.apache.kafka.common.errors.TopicExistsException: Topic 'test_topic' already exists.
请问该日志属于预期情况吗?有没有办法避免这类日志泛滥?
解答
该日志是否属于预期情况?
这属于预期行为。MirrorSourceConnector会定期检查目标集群中是否存在需要同步的主题,当发现主题已存在时,会抛出TopicExistsException并输出WARN级别的日志,但这种情况不会影响数据同步流程,只是Connector执行常规检查后的正常反馈。
如何避免这类日志泛滥?
可以通过以下几种方式解决:
- 禁用Connector自动创建主题:在MirrorSourceConnector的配置中添加
topic.creation.enabled=false,前提是目标集群的同步主题已提前创建完成(可通过脚本、Kafka Admin API或其他自动化工具批量创建)。配置后Connector将不再尝试创建主题,从根源上消除该警告。 - 调整日志级别:修改Kafka Connect的日志配置(如log4j.properties),将
org.apache.kafka.connect.mirror.MirrorSourceConnector的日志级别从WARN调整为ERROR,这样只有严重错误才会被记录,警告日志不再输出。配置示例:
log4j.logger.org.apache.kafka.connect.mirror.MirrorSourceConnector=ERROR
- 升级Kafka版本:Kafka 2.8及以上版本优化了MirrorMaker 2的日志输出逻辑,针对已存在的主题,只会在第一次尝试创建失败时打印一次警告,不会重复输出。若当前使用的是2.7及以下版本,升级到更高版本可解决日志泛滥问题。
内容的提问来源于stack exchange,提问作者Shubham Garg
相关产品推荐
相关产品推荐

