Apache Beam和Apache Kafka在流处理方面有什么区别? 我也试图掌握技术和程序上的差异。
请通过报告来帮助我理解。
答案 0 :(得分:4)
Beam是一个编程API,但不是您可以使用的系统或库。有多个Beam runners 可用于实现Beam API。
Kafka是一个流处理平台,附带Kafka Streams(又名Streams API),这是一个Java流处理库,用于从Kafka主题读取数据并将结果写回Kafka主题。
答案 1 :(得分:4)
Beam是一种API,它以一种统一的方式使用Flink,Storm等底层流处理引擎。
Kafka主要是一个集成平台,该平台提供基于独立应用程序用来相互通信的主题的消息传递系统。
在此消息传递系统(和Producer / Consummer API)的顶部,Kafka提供了一个API,可以使用消息作为数据和主题作为输入或输出来执行流处理。 Kafka Stream处理应用程序是独立的Java应用程序,并充当常规的Kafka Consummer和Producer(这对于了解如何管理这些应用程序以及如何在流处理应用程序实例之间共享工作负载非常重要)。
简而言之,Kafka Stream处理应用程序是独立的Java应用程序,它们在Kafka Cluster之外运行,从Kafka Cluster馈送并将结果导出到Kafka Cluster。在其他流处理平台上,流处理应用程序在群集引擎内部运行(并由该引擎管理),从其他地方进行馈送并将结果导出到其他地方。
Kafka和Beam Stream API之间的一大区别是Beam使数据流中的有界数据与无界数据有所区别,而Kafka则没有区别。因此,必须使用定时/会话化窗口来手动使用Kafka API处理有界数据以收集数据。