Java 卡夫卡消息传递语义
我正在阅读有关消费者的信息,并面临以下信息消费定义: 我们的主题分为一组完全有序的分区,每个分区 在每次订阅中,只有一个消费者使用它 任何给定时间的消费者群体。这意味着 每个分区中的使用者只是一个整数,即偏移量 要使用的下一条消息的 我对措辞的解释如下: 使用者组从由多个分区组成的主题中读取数据。然后为组中的每个使用者分配一些分区子集,这些分区与组中其他使用者的分区不重叠Java 卡夫卡消息传递语义,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我正在阅读有关消费者的信息,并面临以下信息消费定义: 我们的主题分为一组完全有序的分区,每个分区 在每次订阅中,只有一个消费者使用它 任何给定时间的消费者群体。这意味着 每个分区中的使用者只是一个整数,即偏移量 要使用的下一条消息的 我对措辞的解释如下: 使用者组从由多个分区组成的主题中读取数据。然后为组中的每个使用者分配一些分区子集,这些分区与组中其他使用者的分区不重叠 考虑以下情况: 由两个消费者组成的消费者组GRP从主题TPC读取数据,主题TPC由两个分区组成P1和P2 问题:如果在某个
考虑以下情况: 由两个消费者组成的消费者组
GRP
从主题TPC
读取数据,主题TPC
由两个分区组成P1
和P2
问题:如果在某个点上C1
从P1
读取,而C2
从P2
读取,它是否可以重新平衡,以便C1
从P2
开始读取,从P1
开始读取。如果是,在什么情况下会发生这种情况
这与上面的引述并不矛盾。我认为在你的问题和评论中有一些事情需要讨论
- 消费者离开消费者组(通过未能及时发送心跳或明确请求离开)
- 新消费者加入消费群体
- 消费者更改其主题订阅
- 消费者组注意到任何订阅主题的主题元数据发生了更改 (例如,分区数量的增加)
为此,您需要考虑从卡夫卡到应用程序的接收器的整个应用程序。如果应用程序的输出不是幂等的,则可能无法实现精确的once语义(EOS)。但是,如果你的输出接收器(如卡夫卡)再次出现,你实际上可以实现EOS。IIUC:1。如果两个消费者同时失去连接,他们将被重新分配,并可能以这种方式结束2。从编程的角度来说,如果你有一个奇怪的分区程序可以做到这一点。@daniu那么我可以想象以下情况:C1从P1读取一些消息而不提交偏移量。然后它失去了与卡夫卡的连接,并成功地处理了消息。同时,另一消费者C3被创建并分配给读取相同消息的P1。这可能是个问题。。。