我是Kafka的新手,我想弄清楚它是怎么工作的。
如果我是对的,Kafka的经纪人会在一个小时内发送一堆信息 poll
消费者。换句话说,当使用者调用函数时 poll
,它将得到一堆消息,然后消费者将逐一处理这些消息。
现在,假设代理中有100条消息,从1到100。当使用者调用函数时 poll
,10条消息一起发送:1-10,11-20。。。同时,使用者将每隔5秒自动向代理提交提交的偏移量。
表示在某个时刻,消费者在处理第15次会议时正在发送承诺的抵消。
在这种情况下,我不知道哪个数字是提交的偏移量,11还是14?
如果是11,则意味着如果代理出于某种原因需要重新发送,它将从11到20重新发送一组消息,但是如果是14,则意味着它将从14到23重新发送一组消息。
1条答案
按热度按时间yyyllmsg1#
“在这种情况下,我不知道哪个数字是提交的偏移量,11还是14?”
自动提交将始终提交在轮询期间获取的最高偏移量。在您的情况下,它将提交回20,与客户端当前正在处理的偏移量无关。
我猜这个例子向您展示了启用自动提交的一些缺点。我建议您自己控制提交的偏移量,方法是禁用它,并且仅在成功处理所有消息之后提交偏移量。然而,在一些用例中,您可以简单地启用自动提交,而无需考虑它。
如果是11,则意味着如果代理出于某种原因需要重新发送,它将从11到20重新发送一组消息,但如果是14,则意味着它将从14到23重新发送一组消息
消耗的偏移量和提交的偏移量之间有区别。只有当您重新启动应用程序或使用者加入或离开客户端的使用者组时,提交的偏移量才具有相关性。否则,poll方法不会在应用程序运行时太在意提交的数据。在另一个答案中,我写了更多关于承诺补偿和消费补偿之间区别的细节。