2

为了消费来自 Kafka 的数据,我们可以在一个主题上有多个消费者,完全解耦。那么,在 kafka 和 pulsar 之间存在差异no shared consumption的页面上(https://streaml.io/blog/pulsar-streaming-queuing )是什么意思?

4

1 回答 1

4

在他的博客中,思杰将共享消息称为排队。使用队列消息,创建多个消费者来接收来自单个主题的消息。哪个消费者收到消息是完全随机的。

使用 Kafka 实现消息传递模式的问题在于 Kafka 消费者标记他们已消费消息的方式。Kafka 消费者使用所谓的高水位线作为消费者偏移量。这意味着消费者只能说“我已经处理到这一点”而不是“我已经处理了这条消息”。

考虑这样的场景:来自同一消费者组的多个 Kafka 消费者正在从同一主题分区进行处理,其中一个消费者因异常而失败,而另一个消费者成功。由于 Kafka 没有内置方式来仅确认单个消息,并且仅使用高水位标记,因此失败的消息将被错误地标记为已使用,而实际上它失败并需要重新处理或发布到错误队列等

为了避免这种情况,您需要每个分区只有一个消费者,这会限制主题的消费吞吐量。这反过来又要求您增加分区数量以满足您的吞吐量需求。

这篇博文中有详细的解释

于 2019-04-26T14:42:20.533 回答