我有两个不同的客户ID和组ID的消费者。除了保留时间和最大分区,我的Kafka安装包含默认配置。我环顾四周看看是否有其他人有同样的问题,但无法取得任何结果。
所以场景是这样的:
消费者A: 连接到Kafka,消耗大约需要消费的300万条消息,然后闲置等待更多消息。
消费者B: 不同的客户端/组ID连接到相同的Kafka主题,这导致消费者A重复300万条消息,而消费者B也消费它们。
这两个消费者是两个完全不同的Java应用程序,它们在同一台计算机上运行不同的客户端和组ID。 Kafka服务器在另一台计算机上。
这是卡夫卡的正常行为吗?我完全失去了。
这是我的消费者配置:
bootstrap.servers=192.168.110.109:9092
acks=all
max.block.ms=2000
retries=0
batch.size=16384
auto.commit.interval.ms=1000
linger.ms=0
key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
block.on.buffer.full=true
enable.auto.commit=false
auto.offset.reset=none
session.timeout.ms=30000
zookeeper.session.timeout=100000
rebalance.backoff.ms=8000
group.id=consumerGroupA
zookeeper.connect=192.168.110.109:2181
poll.interval=100
我的消费者B的明显区别是group.id=consumerGroupB
答案 0 :(得分:2)
这是正确的行为。因为根据您的配置,您的消费者不会提交已阅读的记录的偏移量!
当消费者读取记录时,它必须提交读取记录,您可以通过设置enable.auto.commit=true
或手动提交每个记录来确保消费者自动提交偏移量。在这种情况下,我认为自动提交对你没问题。