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

时间:2017-04-13 21:41:04

标签: apache-kafka apache-storm apache-flink

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

1 个答案:

答案 0 :(得分:7)

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

  • 分发
  • 性能
  • 可靠性

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

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

分发: Kafka是本地分发的,适合流处理的分发性质。 Kafka将传入数据划分为按偏移排序的分区,这些分区在物理上分布在群集上。然后这些分区可以以分布式方式为流处理器提供信息。

<强>性能: Kafka旨在简化,为了性能而牺牲先进功能。 Kafka的优势明显优于传统的消息传递系统,这也可以在paper中看到。主要原因如下:

  •   

    Kafka制作人不等待经纪人的确认   和代理可以处理的数据一样快地发送数据

  •   

    Kafka的存储格式更高效,元数据更少。

  •   

    Kafka经纪人是无国籍的,不需要关心消费者的状况。

  •   

    Kafka利用UNIX sendfile API高效地传递数据   通过减少数据副本的数量来向消费者提供代理   系统调用。

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

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