为什么在实时处理中使用apache kafka

Exo*_*mus 5 apache-kafka apache-storm apache-flink

最近我一直在研究使用风暴,flink等实时数据处理......我遇到的所有架构都使用kafka作为数据源和流处理器之间的一层,为什么这个层应该存在?

Ste*_*cek 7

我认为使用Apache Kafka进行实时处理有三个主要原因:

  • 分配
  • 性能
  • 可靠性

在实时处理中,需要快速可靠地将数据从数据源传送到流处理器.如果你做得不好,它很容易成为你的实时处理系统的瓶颈.这是卡夫卡可以提供帮助的地方.

之前,传统的消息传递ApacheMQ和RabbitMQ并不是特别适合实时处理大量数据.出于这个原因,Linkedin工程师开发了自己的消息传递系统Apache Kafka,以便能够解决这个问题.

分布: Kafka是原生分布的,适合流处理的分发性质.Kafka将传入数据划分为按偏移排序的分区,这些分区在物理上分布在群集上.然后,这些分区可以以分布式方式馈送流处理器.

性能: Kafka的设计简单,为了性能而牺牲了先进功能.Kafka的优势明显优于传统的消息传递系统,本文也可以看到.主要原因如下:

  • Kafka生产者不等待经纪人的确认,并且发送数据的速度与经纪人可以处理的速度一样快

  • Kafka具有更高效的存储格式,元数据更少.

  • Kafka经纪人是无国籍的,它不需要关心消费者的状态.

  • Kafka利用UNIX sendfile API通过减少数据副本和系统调用的数量,有效地将数据从代理传递给消费者.

可靠性: Kafka充当数据源和流处理器之间的缓冲区,以处理大量数据.Kafka只是简单地存储所有传入的数据,消费者负责决定他们想要处理数据的速度和速度.这确保了可靠的负载平衡,使得流处理器不会被太多数据所淹没.

Kafka保留策略还允许在处理过程中轻松恢复故障(Kafka默认保留所有数据7天).每个消费者跟踪上次处理的消息的偏移量.因此,如果某些消费者失败,很容易在故障之前回滚到该点并再次开始处理而不丢失信息或需要从头开始重新处理所有流.

  • 我只想强调一点,Kafka经纪人可以让你解耦生产者和消费者系统.(这是"可靠性"点以上部分,但我想强调它,因为它是没有明确提及.) - 另外,我想指出,卡夫卡比发布/订阅或邮件系统更多.它是一个流媒体平台,具有消息代理,客户端,其他系统的连接器和流处理功能 - 因此,如果您已经拥有Kafka,您现在甚至可能需要流处理框架. (2认同)