我使用的是一个主题,一个分区,一个使用者,Kafka客户端版本为0.10。
我得到两个不同的结果:
如果首先对paused进行分区,则产生一条消息并调用resume方法。 KafkaConsumer可以成功轮询未提交的消息。
但是,如果我先生成消息并且未提交其偏移量,则在几秒钟后暂停分区,以调用resume方法。 KafkaConsumer将不会收到未提交的消息。我使用kafka-consumer-groups.sh
在Kafka服务器上对其进行了检查,它显示了LOG-END-OFFSET minus CURRENT-OFFSET = LAG = 1
。
我已经尝试了两天,我重复了很多次这样的测试,结果总是这样。我需要一些建议,或者有人可以告诉我其Kafka的原始机制。
答案 0 :(得分:2)
为了观察#2,如果重新启动应用程序,它将为您提供未提交偏移量中的所有记录,即丢失的记录;如果您的使用者再次未提交,则在应用程序注册使用者时将再次发送该记录重新启动时使用Kafka。是预期的。
假设您正在使用consumer.poll()
,它将创建一个混合流接口,即是否累积了提到的duration
进入Kafka的数据,并在持续时间结束后将其提供给消费者进行处理。这种连续的累积发生在后端,并且与您是否已提交偏移量无关。
使用者的位置给出了下一条记录的偏移量 将给出。它比最大偏移量大一个 消费者已经看到了该分区。它会自动前进 消费者在轮询(long)的呼叫中收到消息的时间。