是什么让Kafka的吞吐量很高?

时间:2017-06-19 02:16:02

标签: apache-kafka

大多数文章都描述了Kafka在读/写吞吐量方面比ActiveMQ等其他消息代理(MB)更好。每个人都理解读/写 在偏移的帮助下使它更快。但我不清楚偏移如何使它更快?

在阅读Kafka架构之后,我有了一些了解,但不清楚是什么让Kafka可扩展,吞吐量高,基于以下几点: -

  1. 可能有偏移量,客户端知道需要读取哪个确切的消息,这可能是提高性能的因素之一。

    在其他MB的情况下,经纪人需要在消费者之间进行协调 该消息仅发送给消费者。但是队列的情况不仅仅是主题。那么是什么让Kafka主题比其他MB的主题更快。

  2. Kafka为可伸缩性提供分区,但像ActiveMQ这样的其他消息代理(MB)也提供了群集。那么Kafka如何更好地处理大数据/高负载呢?

  3. 在其他MB中我们可以有听众。所以一旦消息传来,经纪人就会传递消息,但是在Kafka的情况下,我们需要进行民意调查,这意味着更多 在经纪人/客户端加载?

2 个答案:

答案 0 :(得分:5)

有关Kafka与其他邮件系统不同和更快的原因的大量详细信息,请参阅Jay Kreps博客文章

https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

实际上有很多差异使Kafka表现良好,包括但不限于:

  • 最大限度地使用顺序磁盘读写
  • 消息的零拷贝处理
  • 使用Linux OS页面缓存而不是Java堆进行缓存
  • 跨群集中的多个代理分区主题
  • 卸载某些功能的智能客户端库 经纪人
  • 批量发布多条已发布的消息,以减少对代理的网络往返次数
  • 支持多个转播消息
  • 将数据预取到客户端缓冲区中,以便更快地跟进请求。

答案 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,您会明白我的意思。

相反,我建议重点研究基于拉的流缓冲确实为您带来的好处:

  • 可重播性!!!

就个人而言,我认为这使下游数据工程系统在出现故障时更容易构建,尤其是因为您不必依赖其内置的复制模型(即使它们有一个复制模型)。例如,对于我来说,很容易使用消息,丢失磁盘,还原计算机并重播丢失的数据。数据流成为其他系统可以与之同步的唯一事实来源,这非常有用!!!

在消息传递中没有免费的午餐,推拉式的优势与劣势各有千秋。人们也尝试过推挽消息传递,这也不是免费的午餐,这可能并不会让您感到惊讶。