Kafka:删除主题的工作原理

时间:2016-06-08 07:41:56

标签: java apache-kafka kafka-consumer-api kafka-producer-api

我正在使用kafka 2.10-0.9.0.1 当我通过命令删除主题时,主题被标记为删除。

bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic T.AB_KAFF

但是,当我向此主题发布消息时,当我再次订阅此主题时,主题描述说它的延迟是-ve当前偏移量(最后提交的偏移量)

bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --describe --group G.AB_KAFF

主题的最后状态:

  

GROUP,TOPIC,PARTITION,CURRENT OFFSET,LOG END OFFSET,LAG,OWNER   G.AB_KAFF,T.AB_KAFF,0,5,5,0,consumer-2_ / 127.0.0.1 G.AB_KAFF,   T.AB_KAFF,1,5,5,0,consumer-2_ / 127.0.0.1

现在我删除了主题。 并向此主题发布消息

再次订阅后的主题状态:

  

GROUP,TOPIC,PARTITION,CURRENT OFFSET,LOG END OFFSET,LAG,OWNER   G.AB_KAFF,T.AB_KAFF,0,5,1,-4,consumer-3_ / 127.0.0.1 G.AB_KAFF,   T.AB_KAFF,1,5,0,-5,consumer-3_ / 127.0.0.1

那么为什么kafka将滞后设置为-ve数。 这不是导致问题的可能性吗?

假设我再次订阅已删除的主题,因此在-ve lag为0之前我不会收到任何消息

其他信息:
- 我在当地运行3个kafka节点 - 我添加了属性:delete.topic.enable = true
- 使用partitions = 2,replication-factor = 2

创建此主题

1 个答案:

答案 0 :(得分:1)

删除主题后,存储在Kafka中的记录将丢失。因此,对最新偏移的查询返回0

组中的使用者实例定期提交特殊主题__consumer-offset-{0..49}中的最后一个读取记录偏移量。在滞后计算期间,它会latestOffset - lastReadRecordOffset,因此在删除主题后kafka-consumers-groups命令中会显示负滞后。

[kamal@tcltest1 bin]$ sh kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list localhost:9092 # Query to get latest offset
test:0:1000
[kamal@tcltest1 bin]$ sh kafka-topics.sh --topic test --zookeeper localhost:2181 --delete
Topic test is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
[kamal@tcltest1 bin]$ sh kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list localhost:9092 # After deletion
[kamal@tcltest1 bin]$ 

存储在Zookeeper中的元数据将被异步删除。 (如果我错了,请纠正我)

[kamal@tcltest1 bin]$ sh zookeeper-shell.sh localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
get /brokers/topics/test/partitions/0/state
{"controller_epoch":1,"leader":0,"version":1,"leader_epoch":0,"isr":[0]}
cZxid = 0x13c
ctime = Thu Jun 09 09:56:05 IST 2016
mZxid = 0x13c
mtime = Thu Jun 09 09:56:05 IST 2016
pZxid = 0x13c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 72
numChildren = 0