ani*_*nir 8 apache-kafka kafka-consumer-api
我在kafka 文档中阅读了以下内容:
- 在 Kafka 中实现消费的方式是将日志中的分区划分到消费者实例上,以便每个实例在任何时间点都是分区“公平份额”的独占消费者。
- Kafka 仅提供分区内记录的总顺序,而不提供主题中不同分区之间的总顺序。
- 对于大多数应用程序来说,按分区排序与按键分区数据的能力相结合就足够了。
- 但是,如果您需要记录的总顺序,这可以通过只有一个分区的主题来实现,尽管这意味着每个消费者组只有一个消费者进程。
我在此页面上阅读了以下内容:
- 消费者从任何单个分区读取,允许您以类似于消息生产的方式扩展消息消费的吞吐量。
- 对于给定的主题,消费者也可以被组织成消费者组——组内的每个消费者都从一个唯一的分区中读取数据,并且该组作为一个整体消费来自整个主题的所有消息。
- 如果消费者的数量多于分区,那么一些消费者将处于空闲状态,因为他们没有可供读取的分区。
- 如果您的分区比消费者多,那么消费者将收到来自多个分区的消息。
- 如果您有相同数量的消费者和分区,则每个消费者都会从一个分区中按顺序读取消息。
疑问
这是否意味着单个分区不能被多个消费者消费?我们不能有一个分区和一个有多个消费者的消费者组,并让他们都从单个分区消费?
如果单个分区只能被单个消费者消费,我在想为什么这个设计决定?
如果我需要对记录进行总订单并且仍然需要并行使用它怎么办?它在 Kafka 中是可撤销的吗?或者这样的场景没有意义?
Mic*_*son 14
在一个消费者组内,任何时候一个分区只能被一个消费者消费。不,您不能在同一组内有 2 个消费者同时从同一分区消费。
Kafka 消费者组允许多个消费者“有点”表现得像一个实体。整个组应该只消费一次消息。如果一个组中的多个消费者要消费相同的分区,这些记录将被多次处理。
如果您需要多次消费一个分区,请确保这些消费者在不同的组中。
当处理需要在任何时候按顺序(串行)发生时,只有一个任务要做。如果您有记录 1、2 和 3 并希望按顺序处理它们,则在处理消息 1 之前您无法执行任何操作。消息 2 和消息 3 是一样的。那么你想并行做什么?
| 归档时间: |
|
| 查看次数: |
5489 次 |
| 最近记录: |