具有在多个实例中运行的应用程序,每个实例都需要消耗主题所有分区中的所有消息。
我知道2种策略:
为每个应用程序实例创建一个唯一的使用者组ID,并像往常一样订阅和提交, 缺点是卡夫卡仍然需要代表每个消费者维持一个消费者群体。
向kafka询问该主题的所有分区,并将使用者分配给所有分区。据我了解,在Kafka中不再有任何代表消费者创建的消费者组。因此,问题是,是否仍然需要提交偏移量,因为卡夫卡方面没有消费者群体可以保持最新状态。创建使用者时未为其分配“ group.id”。
答案 0 :(得分:1)
为主题的所有分区询问kafka并将使用者分配给 所有这些。据我了解,不再有任何消费群体 代表卡夫卡的消费者创建的。所以问题是 由于没有消费者,因此仍然需要提交偏移量 卡夫卡方面保持最新状态。消费者被创建 而不为其分配“ group.id”。
当您呼叫consumer.assign()
而不是consumer.subscribe()
时,不需要group.id
属性,这意味着Kafka不需要或不需要维护任何组。
提交偏移量基本上是在跟踪已处理的内容,因此您无需再次对其进行处理。这也可以手动完成。例如,在处理完邮件后,读取轮询的邮件并将偏移量写入文件一次。
在这种情况下,您的程序负责编写偏移量,并在重新启动后使用consumer.seek()
读取下一个偏移量
唯一的缺点是,如果要将消费者从一台计算机上移动到另一台计算机上,则还需要复制此文件。
如果您不想复制文件,也可以将它们存储在可以从任何计算机访问的某个数据库中(尽管相对 可以更简单,更快地写入文件)。
另一方面,如果有一个消费者组,则只要您的消费者有权访问Kafka,您的Kafka就会让您的消费者自动从上次提交的偏移量中进行读取。
答案 1 :(得分:0)
总会有一个消费者组设置。如果您没有设置它,那么无论您运行的是哪个使用者都将使用其默认设置,或者Kafka会分配一个默认设置。
Kafka将跟踪使用该消费者组的所有消费者的偏移量。
仍然需要提交偏移量。如果没有提交偏移量,Kafka将不知道已经读取了什么。
以下是查看所有消费群体及其滞后时间的命令: