运行此命令时,我得到2个主题。我知道我创建了测试主题,但是看到了另一个名为“ __consumer_offsets”的主题。 顾名思义,它暗示与消费者补偿有关,但是如何使用?
$ bin/kafka-topics.sh --list --zookeeper localhost:2181
__consumer_offsets
test
$ bin/kafka-topics.sh --describe --zookeeper localhost:2181
Topic:__consumer_offsets PartitionCount:50 ReplicationFactor:1 Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
Topic: __consumer_offsets Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: __consumer_offsets Partition: 1 Leader: 0 Replicas: 0 Isr: 0
*
*
*
Topic: __consumer_offsets Partition: 48 Leader: 0 Replicas: 0 Isr: 0
Topic: __consumer_offsets Partition: 49 Leader: 0 Replicas: 0 Isr: 0
这发生在Kafka 1.1.0中,为什么有50个分区。 还在寻找一种禁用此方法的方法,因为每次我尝试运行“描述”主题时,它都会先打印__consumer_offsets的50个分区,然后再打印我的主题。
答案 0 :(得分:1)
消费者根据消费者组ID将最后消耗的消息偏移ID存储在kafka主题__consumer_offsets
中。
这样一来,不同的使用者(显然具有不同的使用者ID)就可以处理上一条消费的消息之后的下一条消息,并避免重复的消息处理。
答案 1 :(得分:1)
在初始版本的Kafka中,偏移量是由zookeeper管理的,但是随着时间的推移,Kafka不断发展,引入了许多新功能。现在,Kafka在内部/系统级主题(即__consumer_offsets)中管理偏移量。
每当您创建一个主题而未明确指定分区数时,默认情况下,Kafka会为该主题创建50个分区。主题__consumer_offsets同样如此。
答案 2 :(得分:0)
使用者=>
使用主题来存储他们所读取的消息的偏移量。当使用者重新启动时,它将启用恢复功能,它将在其下降并处理下一个偏移之前读取其消耗的最后位置。
@ cricket_007是正确的,您可以在Kafka中默认使用重复项,这是至少使用过一次的语义。