我的用例如下:
我有一个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
很合适,那么我对这个工具也不是很了解。
答案 0 :(得分:1)
Mirror Maker用于执行...镜像。当您要将一个群集从一个数据中心镜像到另一个具有相同主题的群集时,此功能很有用。您的用例不一样。
Kafka Connect用于通过Kafka主题同步不同的系统(例如,来自数据库的数据),但在该用例中我也看不到。
我将为此使用Kafka Streams应用程序。
答案 1 :(得分:1)
据我所知,没有直接方法将传入的主题消息分支到基于传入消息的主题列表。您需要编写自定义代码来实现此目的。
context.forward(键,值,To.child(“选定主题”))
答案 2 :(得分:0)
所有其他答案都是正确的,在撰写本文时,我确实在Kafka工具集中找到了任何“仅配置”解决方案。
最终的诀窍是使用_controller.complete(webViewController);
,因为其“ kafka输出插件”支持Logstash
参数中的jinja变量。
因此,一旦字段中有“目标主题名称”(例如topic-id
),它就很简单:
service_name