Kafka连接和流

时间:2018-10-05 12:19:37

标签: apache-kafka apache-kafka-streams apache-kafka-connect

所以我最近开始阅读有关Kafka的文章,并且对Kafka Connect和Kafka Streams之间的区别感到困惑。 根据定义, Kafka Streams 可以从Kafka主题收集数据,对其进行处理,然后将输出推送到另一个Kafka主题。 在 Kafka Connect 上,将大型数据集移入和移出Kafka。

我的问题是,为什么我们需要Kafka Connect才能读取,处理数据并将其推送至某个主题?为什么要增加一个组成部分? 如果有人可以解释其中的不同,那将是很棒的 在此先感谢:)

3 个答案:

答案 0 :(得分:7)

Kafka Streams Apache Kafka 的流处理库。因此,您可以构建流应用程序,从Kafka主题读取/写入数据。这是一个通用库。

另一方面, Kafka Connect 是一个“数据集成”框架。通常,您使用Kafka Connect将数据从诸如关系数据库之类的某些数据系统导入到一些Kafka主题中。您也可以使用相同的框架进行数据导出。

有很多用于不同数据存储系统的连接器:HDFS,关系数据库,ElasticSearch等。

使用这两个组件(Kafka Connect,Kafka Streams)的可能方案之一例如:

  

从关系数据库连续将数据导入Kafka主题。使用Kafka Streams应用程序处理数据,该应用程序将结果写入某些输出主题。使用Kafka Connect将数据从该输出主题导出到ElasticSearch。

[1]这篇博客文章很好地概述了两种技术的共同作用:https://www.confluent.io/blog/hello-world-kafka-connect-kafka-streams/

答案 1 :(得分:3)

Kafka connect:由于Kafka充当数据中心(标准),因此kafka必须连接到世界上的整个数据源并导入数据。所有这些都具有相同的行为,因此,如果我们为此目的有一个通用的框架和标准。这将是非常有用和干净的。这就是为什么Kafka connect在这里。它只是桥梁。这里不会进行任何数据转换。因为它不是出于这个目的。

Kafka Streams:专为数据转换而设计。因此,所有与计算相关的库都将在此处提供。

答案 2 :(得分:2)

与选择字段相比,不应将Kafka Connect用于广泛的过滤和更大的数据转换。关于何时不使用简单消息转换(SMT)的问题,有一个卡夫卡峰会演讲

Kafka流可以嵌入到任何Java应用程序中,以用作应用程序要使用的内存KV存储中的一种。例如,可以编写一个Web应用程序并将KTable用作由Kafka备份的数据库。否则,它只是比生产者和使用者更高级别的库,但仅限于处理单个Kafka集群数据。 KSQL是此基础之上的附加层。

另一方面,Kafka Connect(虽然可能是嵌入式的;请参阅Debezium嵌入式模式),其目的是“放手一搏”-如果存在连接器,那么您所需要的只是配置文件,而不是自己编写任何代码