如何在同一线程中成功地对第二个kafka使用者执行轮询?

pnwntuvh  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(285)

我有两个kafka消费者,订阅了不同的主题,属于同一个消费者组,拥有不同的消费者id,在同一个线程中运行。他们正在按顺序执行poll,但在第一个完成后,第二个似乎被困在poll中。我试着将他们与不同的消费者群体联系起来,这似乎是可行的,但不幸的是,这对我来说不是一个可行的解决方案。
我在《Kafka:权威指南》中发现了这一点:
一个线程中不能有多个属于同一组的使用者,也不能有多个线程安全地使用同一使用者。每个线程一个使用者是规则。
由于我需要执行特定的消息处理顺序,该引用将我引向某种形式的线程合作。
有人能解释为什么需要运行属于同一消费群体的不同消费者,在不同的线程中订阅不同的主题吗?
谢谢您。

wbrvyc0a

wbrvyc0a1#

Kafka用户邮件列表说明
马蒂亚斯j。萨克斯:“为什么它会阻塞?在第一个消费者调用poll()之后,它将加入该组,并且该组将有1个成员。当第二个消费者调用poll()时,它将尝试加入该组。代理端组协调器知道组中已经有一个消费者,它将等待第一个消费者说“我仍然在这里,仍然是组的一部分”--但是,这永远不会发生,因为第一个消费者将通过调用poll()来执行此操作,但它不能,因为第二个消费者被困在自己的poll()调用中,无法真正加入该组。最终,第一个使用者将超时并从组中删除,第二个使用者将取消阻止(组中仍只有一个成员)。之后,第一个消费者将尝试加入组。。。等等。这场乒乓球比赛将永远持续下去……”

相关问题