首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在实时处理中使用apache kafka?

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

Stack Overflow用户
提问于 2017-04-13 21:41:04
回答 1查看 1.9K关注 0票数 5

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-13 23:41:11

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

  • 分布
  • 性能
  • 可靠性

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

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

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

Performance:卡夫卡被设计成简单的,为了性能而牺牲先进的特性。卡夫卡的性能比传统的消息传递系统有很大的不同,这一点在这个中也可以看到。主要原因如下:

  • 卡夫卡制片人不会等待经纪人的确认,并尽可能快地发送数据。
  • 卡夫卡有一种更有效的存储格式,元数据更少。
  • 卡夫卡经纪人是无国籍的,它不需要关心消费者的状况。
  • Kafka利用UNIX sendfile,通过减少数据副本和系统调用的数量,有效地将数据从代理传递给使用者。

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

Kafka保留策略还允许在处理过程中容易地从故障中恢复(Kafka默认保留所有数据7天)。每个使用者跟踪最后处理的消息的偏移量。由于这个原因,如果某些使用者失败了,那么很容易在失败之前回滚到点,然后再次开始处理,而不会丢失信息,或者需要从头开始重新处理所有流。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43402184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档