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

ani*_*nir 8 apache-kafka kafka-consumer-api

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

  • 在 Kafka 中实现消费的方式是将日志中的分区划分到消费者实例上,以便每个实例在任何时间点都是分区“公平份额”的独占消费者。
  • Kafka 仅提供分区内记录的总顺序,而不提供主题中不同分区之间的总顺序。
  • 对于大多数应用程序来说,按分区排序与按键分区数据的能力相结合就足够了。
  • 但是,如果您需要记录的总顺序,这可以通过只有一个分区的主题来实现,尽管这意味着每个消费者组只有一个消费者进程

在此页面上阅读了以下内容:

  • 消费者从任何单个分区读取,允许您以类似于消息生产的方式扩展消息消费的吞吐量。
  • 对于给定的主题,消费者也可以被组织成消费者组——组内的每个消费者都从一个唯一的分区中读取数据,并且该组作为一个整体消费来自整个主题的所有消息
  • 如果消费者的数量多于分区,那么一些消费者将处于空闲状态,因为他们没有可供读取的分区。
  • 如果您的分区比消费者多,那么消费者将收到来自多个分区的消息。
  • 如果您有相同数量的消费者和分区,则每个消费者都会从一个分区中按顺序读取消息。

疑问

  1. 这是否意味着单个分区不能被多个消费者消费?我们不能有一个分区和一个有多个消费者的消费者组,并让他们都从单个分区消费?

  2. 如果单个分区只能被单个消费者消费,我在想为什么这个设计决定?

  3. 如果我需要对记录进行总订单并且仍然需要并行使用它怎么办?它在 Kafka 中是可撤销的吗?或者这样的场景没有意义?

Mic*_*son 14

  1. 在一个消费者组内,任何时候一个分区只能被一个消费者消费。不,您不能在同一组内有 2 个消费者同时从同一分区消费。

  2. Kafka 消费者组允许多个消费者“有点”表现得像一个实体。整个组应该只消费一次消息。如果一个组中的多个消费者要消费相同的分区,这些记录将被多次处理。

    如果您需要多次消费一个分区,请确保这些消费者在不同的组中。

  3. 当处理需要在任何时候按顺序(串行)发生时,只有一个任务要做。如果您有记录 1、2 和 3 并希望按顺序处理它们,则在处理消息 1 之前您无法执行任何操作。消息 2 和消息 3 是一样的。那么你想并行做什么?