最近我一直在研究利用风暴,flink等进行实时数据处理.我所介绍的所有架构都使用kafka作为数据源和流处理器之间的一个层,为什么这个层应该存在?
发布于 2017-04-13 23:41:11
我认为,使用Apache进行实时处理有三个主要原因:
在实时处理中,需要将数据从数据源快速可靠地传递到流处理器。如果你做得不好,它很容易成为你的实时处理系统的瓶颈。这里是卡夫卡可以帮忙的地方。
以前,传统的消息传递ApacheMQ和RabbitMQ并不特别适合实时处理大量的数据。出于这个原因,Linkedin的工程师们开发了自己的消息系统Apache来解决这个问题。
分布:卡夫卡是本地分布的,符合流处理的分布性质。Kafka将传入的数据划分为按偏移量排序的分区,这些分区物理上分布在集群上。然后,这些分区可以以分布式方式提供流处理器。
Performance:卡夫卡被设计成简单的,为了性能而牺牲先进的特性。卡夫卡的性能比传统的消息传递系统有很大的不同,这一点在这个纸中也可以看到。主要原因如下:
Reliability: Kafka充当数据源和流处理器之间的缓冲区,以处理大量的数据。Kafka只是简单地存储所有输入的数据,消费者负责决定他们想要处理多少和多快的数据。这确保了可靠的负载平衡,即流处理器不会被太多的数据淹没。
Kafka保留策略还允许在处理过程中容易地从故障中恢复(Kafka默认保留所有数据7天)。每个使用者跟踪最后处理的消息的偏移量。由于这个原因,如果某些使用者失败了,那么很容易在失败之前回滚到点,然后再次开始处理,而不会丢失信息,或者需要从头开始重新处理所有流。
https://stackoverflow.com/questions/43402184
复制相似问题