大多数文章都描述了Kafka在读/写吞吐量方面比ActiveMQ等其他消息代理(MB)更好。每个人都理解读/写 在偏移的帮助下使它更快。但我不清楚偏移如何使它更快?
在阅读Kafka架构之后,我有了一些了解,但不清楚是什么让Kafka可扩展,吞吐量高,基于以下几点: -
可能有偏移量,客户端知道需要读取哪个确切的消息,这可能是提高性能的因素之一。
在其他MB的情况下,经纪人需要在消费者之间进行协调 该消息仅发送给消费者。但是队列的情况不仅仅是主题。那么是什么让Kafka主题比其他MB的主题更快。
Kafka为可伸缩性提供分区,但像ActiveMQ这样的其他消息代理(MB)也提供了群集。那么Kafka如何更好地处理大数据/高负载呢?
在其他MB中我们可以有听众。所以一旦消息传来,经纪人就会传递消息,但是在Kafka的情况下,我们需要进行民意调查,这意味着更多 在经纪人/客户端加载?
答案 0 :(得分:5)
有关Kafka与其他邮件系统不同和更快的原因的大量详细信息,请参阅Jay Kreps博客文章
实际上有很多差异使Kafka表现良好,包括但不限于:
答案 1 :(得分:2)
在很大程度上,Kafka对于消息代理是快速的营销。例如,IBM MessageSight设备在2013年执行了13M msgs / sec的延迟,延迟为 microsecond 。在一台计算机上。在Kreps甚至开始创建Github的前一年: https://www.zdnet.com/article/ibm-launches-messagesight-appliance-aimed-at-m2m/
Kafka在很多方面都有好处。 真正的低延迟消息传递不是其中之一。您绝对不能在任何以延迟为中心的纯环境中使用批处理传递(例如,一定范围的偏移量)。当事件到达时,如果您希望将延迟降到最低,则必须立即尝试传送。这并不意味着要等待几秒钟来批量读取事件或的块,而要忍受请求每条消息的开销。如果您要将Kafka与普通的基于推送的代理进行比较,请尝试使用偏移范围为1(因此:1条消息)的Kafka,您会明白我的意思。
相反,我建议重点研究基于拉的流缓冲确实为您带来的好处:
就个人而言,我认为这使下游数据工程系统在出现故障时更容易构建,尤其是因为您不必依赖其内置的复制模型(即使它们有一个复制模型)。例如,对于我来说,很容易使用消息,丢失磁盘,还原计算机并重播丢失的数据。数据流成为其他系统可以与之同步的唯一事实来源,这非常有用!!!
在消息传递中没有免费的午餐,推拉式的优势与劣势各有千秋。人们也尝试过推挽消息传递,这也不是免费的午餐,这可能并不会让您感到惊讶。