使用 kafka-connect 转换 kafka 消息有意义吗?

Does it make sense to use kafka-connect to transform kafka messages?

我们的基础设施中有 confluents 平台。我们的核心是使用 kafka broker 来分发事件。数十台设备向 kafka 主题(每种类型的事件都有一个 kafka 主题)生成事件,其中事件在 google 的 protobuf 中被序列化。我们有 confluent 的模式注册表来跟踪 protobuf 模式。

我们需要的是,对于几个事件,我们需要应用一些转换,然后将转换输出发布到其他某个 kafka 主题。当然,Kafka Streams 是实现这一目标的一种方式,like in this example。但是,我们不希望每个转换都有一个 java 应用程序(这会增加项目的复杂性和 development/deployment 工作量),并且将所有流放在一个应用程序中感觉不对(修改一个将需要停止所有流并重新开始)。

此时,我们认为 Confluent 的 Kafka Connect 可能是更好的方法。我们可以有几个 worker,我们可以将它们部署到一个 kafka connect instance/or 集群中。问题是;

使用 kafka connect 从一个 kafka 主题获取消息并将其发送到另一个 kafka 主题是否有意义?因为所有用例和示例旨在从外部(数据库、文件等)获取数据到 kafka,以及从 kafka 到外部。

澄清一下,Kafka Connect 不是“Confluent 的”,它是 Apache Kafka 的一部分。

虽然您可以将 MirrorMaker2/Confluent Replicator 与转换一起使用,但老实说,这与将转换逻辑提取到共享库中,然后捆绑一个可部署的 Kafka Streams 应用程序并接受输入配置参数和中间转换的输出主题。

您对单点管理提出了一个很好的观点,但这也是一个单点故障...如果您使用 Connect,更改转换插件也需要您停止并重新启动 Connect 服务器,如果所有主题都是同一个连接器的一部分,那么任何任务失败都会停止一定比例的主题转换

无论如何,Kafka Streams(或 KSQL)是集群间翻译的首选

您还可以查看 Apache Nifi 等解决方案,以实现更复杂的事件管理和路由