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 流处理应用实现这些功能
      • 但毕竟这世界上还存在着很多中小企业,它们的流处理数据量并不巨大,逻辑也并不复杂,部署几台或十几台机器足以应付。在这样的需求之下,搭建重量级的完整性平台实在是“杀鸡焉用牛刀”
  • Apache Kafka 从一个优秀的消息引擎系统起家,逐渐演变成现在分布式的流处理平台。你不仅要熟练掌握它作为消息引擎系统的非凡特性及使用技巧,最好还要多了解下其流处理组件的设计与案例应用

相关推荐