出现的现状:
为了生产环境的安全及清洁,pulsar关闭自动创建topic的配置,broker.conf: allowAutoTopicCreation=false,这就导致了在手动创建项目依赖的topic之后,代码尚未发布成功,导致新建的topic处于不活跃状态,于是触发自动删除topicbroker.conf: brokerDeleteInactiveTopicsEnabled=true,导致应用程序启动报错,而Pulsar 在自动删除 partitioned topic 时,不会删除分区数量这个元数据。所以再次创建时会报错,需要删除后再重新创建。
# 查看topic
pulsar-admin topics list public/default
# 创建topic
pulsar-admin topics create-partitioned-topic persistent://public/default/my-topic --partitions 3#删除topic
pulsar-admin topics delete-partitioned-topic persistent://public/default/my-topic
Pulsar 默认开启 Topic 自动删除。但 partitioned topic 被自动删除后,KoP 将无法访问它:
Error: NOT_LEADER_OR_FOLLOWER (org.apache.kafka.clients.producer.internals.Sender)
原因如下:
解决方法 1:禁止 Topic 自动删除
broker.conf:
brokerDeleteInactiveTopicsEnabled=false
解决方法 2:启用分区数量自动删除
broker.conf:
brokerDeleteInactivePartitionedTopicMetadataEnabled=true
如果生产环境中比较依赖 Topic 自动删除,可以选择第二种方法。