我正在考虑将Apache Kafka用作许多订阅者的分布式消息发布者。它非常适合我,因为解决方案必须易于扩展。
Kafka的文档声明可以确认消息,从而确保消息传递。但是,今天我遇到this article,其中指出有些情况可能会丢失消息。再说一遍,这篇文章只在谷歌缓存中提供,所以我不知道它是否值得信赖......
所以我有一个疑问 - 是否有任何时刻,任何场景,消息将丢失?换句话说 - 我的主要要求是每条消息必须到达目的地。可以通过使用Apache Kafka来满足吗?这是这项工作的合适工具吗?
答案 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以便更好地理解