Apache Kafka和消息传递保证

时间:2014-05-20 08:18:57

标签: java apache-kafka

我正在考虑将Apache Kafka用作许多订阅者的分布式消息发布者。它非常适合我,因为解决方案必须易于扩展。

Kafka的文档声明可以确认消息,从而确保消息传递。但是,今天我遇到this article,其中指出有些情况可能会丢失消息。再说一遍,这篇文章只在谷歌缓存中提供,所以我不知道它是否值得信赖......

所以我有一个疑问 - 是否有任何时刻,任何场景,消息将丢失?换句话说 - 我的主要要求是每条消息必须到达目的地。可以通过使用Apache Kafka来满足吗?这是这项工作的合适工具吗?

2 个答案:

答案 0 :(得分:4)

您要查找的文章的原文如下:http://engineering.onlive.com/2013/12/12/didnt-use-kafka/

如果您阅读完整的文章和评论,您会发现很多问题不在于保证至少一次交付,而是由客户交付并成功处理。关于这篇文章的最后几条评论,包括原作者,似乎表明他对这种方法感到满意。

你可能也会发现这篇感兴趣的文章 - 类似的问题:

https://www.mail-archive.com/users%40kafka.apache.org/msg04492.html

从一些文档中可以看出:

  

因此,Kafka保证默认情况下至少一次交付   允许用户通过禁用最多实施一次交付   生产者重试并在处理之前提交其偏移量   一批消息。完全一次交付需要与合作   目标存储系统但Kafka提供了偏移量   实现这一点是直截了当的。

我见过的大多数谈话都不是关于至少一次的保证,而是关于如何从那里到最多一次或完全一次。

答案 1 :(得分:2)

卡夫卡确实声称了 对于复制因子为N的主题,我们将容忍最多N-1个服务器故障,而不会丢失任何提交给日志的消息。

可能值得阅读其文档页面中的Message Delivery Semantics以便更好地理解