Kafka 连接和流
Kafka Connect and Streams
所以我最近开始阅读有关 Kafka 的文章,我对 Kafka Connect 和 Kafka Streams 之间的区别有点困惑。
根据定义 Kafka Streams 可以从 Kafka 主题收集数据,对其进行处理并将输出推送到另一个 Kafka 主题。
Kafka Connect 将大型数据集移入和移出 Kafka。
我的问题是为什么我们需要 Kafka Connect 几乎可以读取数据、处理数据并将其推送到主题?为什么要多一个组件?
如果有人能解释其中的区别,那就太好了
提前致谢:)
Kafka Streams 是 Apache Kafka 的流处理库。因此,您可以构建流式应用程序、read/write 数据 from/to Kafka 主题。这是一个通用库。
另一方面,Kafka Connect 是一个 "data integration" 框架。通常,您使用 Kafka Connect 将数据从关系数据库等数据系统导入到某个 Kafka 主题中。您也可以使用相同的框架进行数据导出。
有很多连接器适用于不同的数据存储系统:HDFS、关系数据库、ElasticSearch 等等。
使用这两个组件(Kafka Connect、Kafka Streams)的可能场景之一是例如:
Continuously import data into Kafka topic from a relational database. Process that data using a Kafka Streams app which writes results into some output topic. Export data from that output topic into ElasticSearch using Kafka Connect.
[1] 此博客 post 很好地概述了这两种技术的协同作用:https://www.confluent.io/blog/hello-world-kafka-connect-kafka-streams/
Kafka Connect 不应该用于广泛的过滤和比 select 字段更大的数据转换。有一个关于何时不使用简单消息转换 (SMT) 的 Kafka 峰会演讲
Kafka Streams 可以嵌入到任何 Java 应用程序中,用作一种内存 KV 存储,供应用程序使用。例如,可以编写一个 Web 应用程序并使用 KTable 作为由 Kafka 备份的数据库。否则,它只是一个比生产者和消费者更高级的库,但仅限于处理单个 Kafka 集群数据。 KSQL 是在此之上的附加层。
另一方面,Kafka Connect(虽然可能是嵌入式的;请参阅 Debezium 嵌入式模式)意味着更多 "hands off" - 如果存在连接器,那么您只需要配置文件,而不是编写你自己的任何代码
Kafka连接:由于Kafka作为数据中心(标准),kafka必须连接到世界上所有的数据源并导入数据。这些都保持相同的行为,所以如果我们为此目的有一个共同的框架和标准。这将非常有用和干净。这就是 Kafka 连接在这里的原因。它只是桥梁。这里不会发生数据转换。因为它不是为了那个目的。
Kafka Streams:专为数据转换而生。所以所有与计算相关的库都将在这里可用。
所以我最近开始阅读有关 Kafka 的文章,我对 Kafka Connect 和 Kafka Streams 之间的区别有点困惑。 根据定义 Kafka Streams 可以从 Kafka 主题收集数据,对其进行处理并将输出推送到另一个 Kafka 主题。 Kafka Connect 将大型数据集移入和移出 Kafka。
我的问题是为什么我们需要 Kafka Connect 几乎可以读取数据、处理数据并将其推送到主题?为什么要多一个组件? 如果有人能解释其中的区别,那就太好了 提前致谢:)
Kafka Streams 是 Apache Kafka 的流处理库。因此,您可以构建流式应用程序、read/write 数据 from/to Kafka 主题。这是一个通用库。
另一方面,Kafka Connect 是一个 "data integration" 框架。通常,您使用 Kafka Connect 将数据从关系数据库等数据系统导入到某个 Kafka 主题中。您也可以使用相同的框架进行数据导出。
有很多连接器适用于不同的数据存储系统:HDFS、关系数据库、ElasticSearch 等等。
使用这两个组件(Kafka Connect、Kafka Streams)的可能场景之一是例如:
Continuously import data into Kafka topic from a relational database. Process that data using a Kafka Streams app which writes results into some output topic. Export data from that output topic into ElasticSearch using Kafka Connect.
[1] 此博客 post 很好地概述了这两种技术的协同作用:https://www.confluent.io/blog/hello-world-kafka-connect-kafka-streams/
Kafka Connect 不应该用于广泛的过滤和比 select 字段更大的数据转换。有一个关于何时不使用简单消息转换 (SMT) 的 Kafka 峰会演讲
Kafka Streams 可以嵌入到任何 Java 应用程序中,用作一种内存 KV 存储,供应用程序使用。例如,可以编写一个 Web 应用程序并使用 KTable 作为由 Kafka 备份的数据库。否则,它只是一个比生产者和消费者更高级的库,但仅限于处理单个 Kafka 集群数据。 KSQL 是在此之上的附加层。
另一方面,Kafka Connect(虽然可能是嵌入式的;请参阅 Debezium 嵌入式模式)意味着更多 "hands off" - 如果存在连接器,那么您只需要配置文件,而不是编写你自己的任何代码
Kafka连接:由于Kafka作为数据中心(标准),kafka必须连接到世界上所有的数据源并导入数据。这些都保持相同的行为,所以如果我们为此目的有一个共同的框架和标准。这将非常有用和干净。这就是 Kafka 连接在这里的原因。它只是桥梁。这里不会发生数据转换。因为它不是为了那个目的。
Kafka Streams:专为数据转换而生。所以所有与计算相关的库都将在这里可用。