Kafka主题到多个Kafka主题调度程序(同一集群)

时间:2019-12-19 17:35:02

标签: apache-kafka apache-kafka-connect apache-kafka-mirrormaker

我的用例如下: 我有一个kafka主题A,其中消息“在逻辑上”属于不同的“服务”,我也不处理将消息发送到A的系统。

我想从A中读取此类消息,并根据描述该服务的一列(它们称为A_1, ..., A_n)将它们分发到同一集群中每个服务的一组主题(我们将其称为KafkaConnect)。格式为CSV样式,但这没关系)。

这组服务是静态的,我现在不必处理添加/删除。

我希望使用MirrorMaker2来执行这样的任务,但是令人惊讶的是,没有卡夫卡的源/接收器(我找不到票证,但它们已被拒绝)。

我见过KafkaStreams,但对于我的(简单)用例来说,这似乎有些过分。

我也认识MirrorMaker2,但我不想仅为此编写和维护代码。

我的问题是:有没有一种方法可以使用kafka本地工具来完成此主题的分发,而无需自己编写kafka-consumer / producer?

PS:如果有人也认为declare @Product table ( Product int , MyUser char(1) ) insert @Product values ('123', 'A') , ('234', 'A') , ('456', 'A') , ('678', 'A') , ('345', 'A') , ('346', 'A') , ('235', 'A') , ('754', 'A') , ('125', 'A') , ('782', 'A') , ('235', 'A') , ('564', 'A') , ('452', 'A') , ('176', 'A') , ('982', 'A') , ('450', 'A') , ('127', 'A') , ('167', 'B') , ('357', 'B') , ('137', 'B') , ('125', 'B') , ('326', 'B') select p.Product , p.MyUser , DueDate = convert(date, DATEADD(day, (ROW_NUMBER() over(partition by p.MyUser order by (select null)) - 1) / 8, getdate())) from @Product p order by MyUser 很合适,那么我对这个工具也不是很了解。

3 个答案:

答案 0 :(得分:1)

Mirror Maker用于执行...镜像。当您要将一个群集从一个数据中心镜像到另一个具有相同主题的群集时,此功能很有用。您的用例不一样。

Kafka Connect用于通过Kafka主题同步不同的系统(例如,来自数据库的数据),但在该用例中我也看不到。

我将为此使用Kafka Streams应用程序。

答案 1 :(得分:1)

据我所知,没有直接方法将传入的主题消息分支到基于传入消息的主题列表。您需要编写自定义代码来实现此目的。

  1. 使用处理器API Refer here
  2. 通过处理器方法中的主题列表
  3. 使用逻辑识别需要分支的主题
  4. 使用context.forward将消息发布到其他主题
      

    context.forward(键,值,To.child(“选定主题”))

答案 2 :(得分:0)

所有其他答案都是正确的,在撰写本文时,我确实在Kafka工具集中找到了任何“仅配置”解决方案。

最终的诀窍是使用_controller.complete(webViewController); ,因为其“ kafka输出插件”支持Logstash参数中的jinja变量。

因此,一旦字段中有“目标主题名称”(例如topic-id),它就很简单:

service_name