脉冲星和卡夫卡在消费方面有什么区别?

What is the difference between pulsar and kafka in regards to consumption?

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

在他的博客中,Sijie 将共享消息传递称为排队。通过队列消息传递,可以创建多个消费者来接收来自单个主题的消息。哪个消费者收到消息是完全随机的。

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

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

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

这个blog post

里面有详细的解释