如何从卡夫卡消费群中读取消息而无需消费?

时间:2018-06-21 09:47:49

标签: apache-kafka kafka-consumer-api pykafka

我正在使用跨多台计算机的公共使用者组来管理kafka队列。现在,我还需要显示队列的当前内容。如何只读取组中尚未读取的消息,而又使这些消息再次被实际处理这些消息的组中的其他使用者读取。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

在Kafka中,一个分区只能由一个组中的一个使用者使用,即,如果您的主题有10个分区,并且产生了20个具有相同groupId的使用者,则只有10个将连接到Kafka,其余10个将处于闲置状态。只有在其中一位现有消费者死亡或未从该主题中进行投票时,Kafka才能确定新消费者。

AFAIK,我认为您无法在消费者群体中做我想做的事情。您显然可以创建另一个groupId并根据第一个使用者组收集的信息来处理消息。

答案 1 :(得分:0)

我认为您可以使用发布-订阅模型。然后,每个使用者都有自己的偏移量,可以自己消耗所有消息。

答案 2 :(得分:0)

在Kafka中,“读取”主题消息和“消费”消息的概念是同一回事。在较高的级别上,使消费者无法使用“已用”消息的唯一原因是,消费者将其读取偏移量设置为超出所讨论消息的值。因此,您可以关闭使用者的自动提交功能,避免在只希望“读取”而不希望“消耗”的情况下提交偏移量。

获取“所有尚未读取的消息”的一个很好的代理是将每个分区的最新 committed 偏移量与 highwater mark 偏移量进行比较。这提供了“滞后”的概念,该滞后表示给定使用者的分区消费量有多远。 pykafka中的fetch_consumer_lag CLI函数就是一个很好的例子。

答案 3 :(得分:0)

Kafka现在有一个KStream.peek() method

请参阅提案"Add KStream peek method"

我从文档中无法100%清楚地知道这可以防止使用从该主题偷看的消息,但是除非如此,否则我看不到如何以任何崩溃安全且可靠的方式使用它。

另请参阅: