Kafka核心技术与实战——03 | Kafka只是消息引擎系统吗?
- 从自上而下的角度去理解 Kafka
- 竟然发现了很多之前学习过程中忽略掉的东西
- 更特别地是,我发现这种学习方法能够帮助我维持较长时间的学习兴趣,不会阶段性地产生厌烦情绪
- Apache Kafka 是消息引擎系统,也是一个分布式流处理平台
- LinkedIn 最开始有强烈的数据强实时处理方面的需求,其内部的诸多子系统要执行多种类型的数据处理与分析,主要包括业务系统和应用程序性能监控
- 以及用户行为数据处理等
- 当时他们碰到的主要问题包括
- 数据正确性不足。因为数据的收集主要采用轮询(Polling)的方式,如何确定轮询的间隔时间就变成了一个高度经验化的事情。虽然可以采用一些类似于启发式算法(Heuristic)来帮助评估间隔时间值,但一旦指定不当,必然会造成较大的数据偏差
- 系统高度定制化,维护成本高。各个业务子系统都需要对接数据收集模块,引入了大量的定制开销和人工成本
- Kafka 社区将其清晰地定位为一个分布式、分区化且带备份功能的提交日志(Commit Log)服务
- Kafka 在设计之初就旨在提供三个方面的特性:
- 提供一套 API 实现生产者和消费者;
- 降低网络传输和磁盘存储开销;
- 实现高伸缩性架构
- 正式推出了流处理组件 Kafka Streams,也正是从这个版本开始,Kafka 正式“变身”为分布式的流处理平台,而不仅仅是消息引擎系统了
- 今天 Apache Kafka 是和 Apache Storm、Apache Spark 和 Apache Flink 同等级的实时流处理平台
- Kafka 与其他主流大数据流式计算框架相比,优势在哪里呢?
- 第一点是更容易实现端到端的正确性(Correctness)。
- 流处理要最终替代它的“兄弟”批处理需要具备两点核心优势:要实现正确性和提供能够推导时间的工具。实现正确性是流处理能够匹敌批处理的基石
- 实现正确性的基石则是要求框架能提供精确一次处理语义,即处理一条消息有且只有一次机会能够影响系统状态
- 因为当这些框架 Spark 或 Flink 与外部消息引擎系统结合使用时,它们无法影响到外部系统的处理语义
- Kafka 则不是这样,因为所有的数据流转和计算都在 Kafka 内部完成,故 Kafka 可以实现端到端的精确一次处理语义
- 可能助力 Kafka 胜出的第二点是它自己对于流式计算的定位
- Kafka Streams 是一个用于搭建实时流处理的客户端库而非是一个完整的功能系统
- 你不能期望着 Kafka 提供类似于集群调度、弹性部署等开箱即用的运维特性,你需要自己选择适合的工具或系统来帮助 Kafka 流处理应用实现这些功能
- 但毕竟这世界上还存在着很多中小企业,它们的流处理数据量并不巨大,逻辑也并不复杂,部署几台或十几台机器足以应付。在这样的需求之下,搭建重量级的完整性平台实在是“杀鸡焉用牛刀”
- 第一点是更容易实现端到端的正确性(Correctness)。
- Apache Kafka 从一个优秀的消息引擎系统起家,逐渐演变成现在分布式的流处理平台。你不仅要熟练掌握它作为消息引擎系统的非凡特性及使用技巧,最好还要多了解下其流处理组件的设计与案例应用
相关推荐
Kafka 2020-09-18
sweetgirl0 2020-07-27
yanghuashuiyue 2020-11-14
huangwei00 2020-10-14
hannuotayouxi 2020-08-20
guicaizhou 2020-08-01
liuxingen 2020-11-13
wangying 2020-11-13
王谦 2020-11-03
shenzhenzsw 2020-10-09
guicaizhou 2020-09-30
jiaomrswang 2020-09-23
jyj0 2020-09-21
guicaizhou 2020-09-15
amwayy 2020-08-03
yangyutong00 2020-08-01
weikaixxxxxx 2020-08-01
PoppyEvan 2020-08-01