Stream processing

Why Kafka Stream

以前,用Kafka构造流处理程序时有两个选择:

  1. 直接拿Consumer和Producer的API进行开发。当直接使用Kafka consumer和producer API时,你如果想要实现比较复杂的逻辑,像聚合和join,就得在这些API的基础上自己实现,还是有些麻烦。
  2. 采用一个成熟的流处理框架。如果用流处理框架,那么就添加了很多很多复杂性,对于调试、性能优化、监控,都带来很多困难。

image-20220103090243081

Kafka Streams是Apache Kafka项目(0.10+版本)的一部分,广泛地支持streaming ETL场景。解决应用状态管理,agg和join操作,基于event-time计算,兼容乱序数据和迟到数据处理等关键问题。Kafka Streams的实现大量借助了Kafka的能力,可以在任何地方部署java进程运行流分析作业,不依赖单独的计算集群,使用Kafka Streams API的程序同时扮演消费者和生产者的角色。

轻量库

Kafka Stream相比于主流的Storm、Spark Streaming、Flink等,优势在于轻量级,就像Kafka的Producer和Consumer,可以轻松将Kafka Streams整合到自己的应用程序中。除了Apache Kafka之外没有任何其它外部依赖, 并且可以在任何Java应用程序中使用,不需要为流处理需求额外部署一个其它集群。

高可用

Kafka Streams使用Kafka作为内部消息通讯存储介质,不需要重新加入其它外部组件来做消息通讯。使用Kafka的分区水平拓展来对数据做有序高效的处理,这样同时兼顾了高性能,高扩展性,并使操作简便。另外支持本地状态容错,本地状态被保存在Kafka中,在机器故障的时候,其他机器可以自动恢复这些状态继续处理。

低延时

毫秒级延迟,并非微批处理,这也是Kafka Streams和其他基于微批处理的流处理框架的不同。Kafka Streams的API与Spark中的非常相似,有非常多相同意义的算子,对于擅长Spark编程的人员来说,写一个Kafka流处理不需要额外进行太多的学习

客户案例

纽约时报使用Apache Kafka 和Kafka Streams将发布的内容实时存储和分发到各种应用程序和系统,以供读者使用。

Pinterest 大规模使用Apache Kafka和Kafka Streams 来支持其广告基础架构的实时预测预算系统。使用Kafka Streams,预测比以往更准确。

作为欧洲领先的在线时尚零售商,Zalando使用Kafka作为ESB(企业服务总线),帮助我们从单一服务架构转变为微服务架构。使用Kafka处理 事件流 使我们的技术团队能够实现近乎实时的商业智能。

荷兰合作银行是荷兰三大银行之一。它的数字神经系统Business Event Bus由Apache Kafka提供支持。它被越来越多的财务流程和服务所使用,其中之一就是Rabo Alerts。此服务会在财务事件时实时向客户发出警报,并使用Kafka Streams构建。

LINE使用Apache Kafka 作为服务的中央数据库,以便彼此通信。每天产生数亿亿条消息,用于执行各种业务逻辑,威胁检测,搜索索引和数据分析。LINE利用Kafka Streams可靠地转换和过滤主题,使消费者可以有效消费的子主题,同时由于其复杂而简单的代码库,保持易于维护性。