由多个消费者从单个kafka分区中消费

时间:2019-09-16 07:54:41

标签: apache-kafka kafka-consumer-api

我在kafka docs中阅读了以下内容:

  
      
  • 在Kafka中实现消耗的方式是通过在消费者实例上划分日志中的分区,以便每个实例在任何时间点都是分区“公平份额”的排他消费者。
  •   
  • Kafka仅提供分区中记录的总顺序,而不提供主题中不同分区之间的记录。
  •   
  • 按分区排序结合按键对数据进行分区的功能足以满足大多数应用程序的需求。
  •   
  • 但是,如果您需要记录的总订单量,则可以通过只有一个分区的主题来实现, 尽管这意味着每个消费者组只有一个消费者流程
  •   

我阅读了以下on this page

  
      
  • 消费者可从任何单个分区读取 ,从而使您能够以类似于消息产生的方式扩展消息消耗的吞吐量。
  •   
  • 还可以将给定主题的消费者组织为消费者组- 该组中的每个消费者都从一个唯一的分区中读取内容,整个组将整个主题中的所有消息都消费 < / strong>。
  •   
  • 如果使用方的数量大于分区的数量,则某些使用方将处于空闲状态,因为它们没有要读取的分区。
  •   
  • 如果您的分区比使用者更多,那么使用者将从多个分区接收消息。
  •   
  • 如果您具有相同数量的使用者和分区,则每个使用者都从一个分区中按顺序读取消息。
  •   

疑问

  1. 这是否意味着多个使用者不能使用一个分区?难道我们只有一个分区,而一个消费者组有一个以上的消费者,并使他们全部都从一个分区中消费吗?

  2. 如果单个分区只能由单个使用者使用,那么我在想为什么要做出此设计决定?

  3. 如果我需要记录的总订单并且仍然需要并行使用该怎么办?在卡夫卡是否可以撤消?还是这种情况没有意义?

1 个答案:

答案 0 :(得分:2)

  1. 在使用者组中,任何时候任何一个使用者只能使用一个分区。不,您不能在同一组中有2个使用者同时从同一分区进行消费。

  2. Kafka消费者组允许多个消费者“某种”行为像一个实体。整个组只能使用一次消息。如果组中的多个使用者要使用相同的分区,则这些记录将被处理多次。

    如果您需要多次使用一个分区,请确保这些使用方位于不同的组中。

  3. 任何时候都需要按顺序(按顺序)进行处理时,只需执行一个任务即可。如果您有记录1、2和3并想按顺序处理它们,则在处理消息1之前您将无法执行任何操作。消息2和3相同。那么您想并行执行什么操作?