Apache Kafka 的儿童读物/插图指南


点击标题
 
黑客新闻讨论
这是对软件开发社区的精彩贡献,本着《Why's Poignant Guide》和《Land of Lisp》的精神。我完全支持这种艺术性、奇思妙想和技术的结合——忠于核心黑客精神。
 
我和 Kafka 一起工作了十年,发现这绝对是一种享受。
 
Kafta 找到完美的用例:对于需要对随时间变化的数据采取动作的任何情况,我都推荐 Kafka - 几乎任何软件系统。在几乎每个系统中,您都希望能够可靠地记录事件,并且希望能够以确定性的方式部分重放您的状态(例如,在您修复错误之后);这两件事都应该是一个严肃的数据存储的赌注,但 AFAIK Kafka 实际上是唯一提供它们的人。
Kafka 本身只能解决一半的问题,因为它不提供内置索引,因此您必须自己构建索引状态,或者甚至可以使用“传统”数据存储作为事实上的缓存。
 
Kafta 找到完美的用例:当您有许多服务器都需要查看相同的按时间顺序排列的数据流(包括它们在网络停机期间可能错过的消息)并实时查看新事件时。
如果在 kafka 配置中设置“log.retention.hours = -1”和“log.retention.bytes = -1”,kafka 将永远存储消息。
例如,在游戏中,用户输入和其他事件可以在 Kafka 中产生,然后通过从头到尾读取和处理 kafka 流来重建整个游戏状态。它比大多数数据库有优势,因为它是实时的。
您还可以使用按时间顺序排列的数据流来表示比简单数组更复杂的数据结构。例如,可以在保留年表的同时表示一棵树。然而,这远非理想的用例。
 
Akka 和许多 actor 模型服务破坏了微服务的可用性、持久性和一般可靠性,因为攻击Akka一个随机节点会造成其混乱,该节点上任何 actor 都可能停止,直到它被转移。
就像 SOA 和 ESB 一样,概念不是问题,而是当时设计的技术限制。解耦和消息传递还不错,但在物理硬件上拥有传统消息队列并不能真正站得住脚。任何派生架构都面临同样的问题。
再说一次,Kafka 不是 actor 模型实现,Akka 也不是分区冗余流处理系统,它们没有那么多重叠;-)