Kafka只是消息引擎系统吗

​ Kafka 只是消息引擎系统吗?

​ 上面这个问题的答案是:Apache Kafka 是消息引擎系统,也是一个分布式流处理平台。

​ Kafka 是 Linkedln 公司内部孵化的项目。他们最开始又强烈的数据强实时处理方面的需求,其内部的诸多子系统要执行多种类型的数据处理与分析,主要包括业务系统和应用程序性能监控,以及用户行为数据处理等。

​ 当时他们碰到的主要问题包括:

  • 数据正确性不足。因为数据的收集主要采用轮询的方式,如何确定轮询的时间间隔就变成了一个高度经验化的事情,一旦指定不当,必然会造成较大的数据偏差。
  • 系统高度定制化,维护成本高。各个业务子系统都需要对接数据收集模块,引入了大量的定制开销和人工成本。

​ 为了解决上述问题,Linkedln 工程师尝试过使用 ActiveMQ 来解决,但效果并不理想。显示需要一个 “大统一” 的系统来取代现有的工作方式,而这个系统就是 Kafka。

​ 如果翻看0.10.0.0之前的官网说明,你会发现 Kafka 社区将其清晰地定位成一个分布式、分区化且带备份功能的提交日志服务。

​ Kafka 在设计之初就旨在三个方面的特性:

  • 提供一套 API 实现生产者和消费者
  • 降低网络传输和磁盘存储开销
  • 实现高伸缩性架构。

​ 后续文章会对这三方面进行讲解。

​ 开源之后的 Kafka 被越来越多的公司应用到它们企业内部的数据管道中,特别是在大数据工程领域,Kafka 在承接上下游、串联数据流管道方面发挥了重要的作用:所有的数据几乎都要从一个系统流入 Kafka 然后再流向下游的另一个系统中。这样的方式引起了 Kafka 社区的思考:与其我把数据从一个系统传递到下一个系统中做处理,我为何不自己实现一套流处理框架呢?基于这个考量,Kafka社区于0.10.0.0版本正式推出了流处理组件Kafka Streams,也正是从这个版本开始,Kafka正式“变身”为分布式的流处理平台,而不仅仅是消息引擎系统了。今天Apache Kafka是和Apache Storm、Apache Spark和Apache Flink同等级的实时流处理平台。

​ 作为流处理平台,Kafka 与其他主流大数据流式计算框架相比,优势在哪里?

第一点是更容易实现端到端的正确性(Correctness)。有一个大神说过,流处理要最终替代批处理需要具备两点核心优势:要实现正确性和提供推导时间的工具。实现正确性是流处理能够匹敌批处理的基石。正确性一直是批处理的强项,而实现正确性的基石则是要求框架能够提供精确一次处理语义,即处理一条消息有且只有一次机会能够影响系统状态。目前主流的大数据流处理框架都宣称实现了精确一次处理语义,但这是有限定条件的,即它们只能实现框架内的精确一次处理语义,无法实现端到端的。

​ 因为当这些框架与外部消息引擎系统结合使用时,它们无法影响到外部系统的处理语义,所以如果你搭建了一套环境使得 Spark 或 Flink 从 Kafka 读取消息之后进行有状态的数据计算,最后再写回 Kafka,那么你只能保证在Spark或Flink内部,这条消息对于状态的影响只有一次。。但是计算结果有可能多次写入到Kafka,因为它们不能控制Kafka的语义处理。相反地,Kafka则不是这样,因为所有的数据流转和计算都在Kafka内部完成,故Kafka可以实现端到端的精确一次处理语义。

能助力Kafka胜出的第二点是它自己对于流式计算的定位。官网上明确标识Kafka Streams是一个用于搭建实时流处理的客户端库而非是一个完整的功能系统。这就是说,你不能期望着Kafka提供类似于集群调度、弹性部署等开箱即用的运维特性,你需要自己选择适合的工具或系统来帮助Kafka流处理应用实现这些功能。

​ 准确来说,这应该是算是一把 “双刃剑”的设计,也是Kafka社区“剑走偏锋”不正面PK其他流计算框架的特意考量。大型公司的流处理平台一定是大规模部署的,因此具备集群调度功能以及灵活的部署方案是不可或缺的要素。但毕竟这世界上还存在着很多中小企业,它们的流处理数据量并不巨大,逻辑也并不复杂,部署几台或十几台机器足以应付。在这样的需求之下,搭建重量级的完整性平台实在是“杀鸡焉用牛刀”,而这正是Kafka流处理组件的用武之地。因此从这个角度来说,未来在流处理框架中,Kafka应该是有一席之地的。

​ 除了消息引擎和流处理平台,Kafka 还能够被用作分布式存储系统。但很少见过在实际生产环境中使用,故这里不作多的解释。

​ 说了这么多,我只想阐述这样的一个观点:Apache Kafka从一个优秀的消息引擎系统起家,逐渐演变成现在分布式的流处理平台。你不仅要熟练掌握它作为消息引擎系统的非凡特性及使用技巧,最好还要多了解下其流处理组件的设计与案例应用。

小结

  • Kafka 在设计之初就旨在提供三个方面的特性:

    • 提供一套 API 实现生产者和消费者
    • 降低网络传输和磁盘存储开销
    • 实现高伸缩性架构。
  • 作为流处理平台,Kafka与其他主流大数据流式计算框架相比,优势有两点:

    • 更容易实现端到端的正确性
    • 它自己对于流式计算的定位。
  • Apache Kafka是消息引擎系统,也是一个分布式流处理平台。除此之外,Kafka还能够被用作分布式存储系统。不过我觉得你姑且了解下就好了,我从没有见过在实际生产环境中,有人把Kafka当作持久化存储来用


Kafka只是消息引擎系统吗
http://example.com/2023/11/08/MQ/Kafka/Kafka只是消息引擎系统吗/
作者
Feng Tao
发布于
2023年11月8日
更新于
2023年11月8日
许可协议