将debezium配置为根据自定义条件将数据放在不同的主题上

时间:2019-01-24 07:24:41

标签: apache-kafka microservices etl apache-kafka-connect

我正迁移到kafka担任经纪人和Debezium,以从所有微服务获取数据(ETL数据)到报告和搜索数据库。

是否可以通过任何方式配置debezium,以便根据自定义条件(例如,用户或公司或行/数据的某些关键列/属性)将数据放在单独的主题上。

3 个答案:

答案 0 :(得分:1)

不确定是否要寻找Topic Routing

假设您无法向Debezium本身添加过滤器选项,典型的模式是使用Kafka Streams,KSQL(或基于您先前的问题的Flink)将您感兴趣的数据过滤并分散到不同的主题中下游消费者的需求。

但是,从单个Debezium配置中,您必须对名称空间/集合/表进行硬编码。您可能需要多个配置。

答案 1 :(得分:0)

我建议实现一个自定义SMT(单个消息转换),它将Debezium连接器生成的记录路由到正确的主题。您可以将cricket_007中答案中链接的Debezium的路由SMT作为自定义实现的示例。在SourceRecord可用的情况下,您可以根据所有捕获的表的列值来决定目标主题。

Kafka Streams或类似软件也可以使用,但由于操作简便(不需要单独的过程),我建议先研究一下SMT,并且仅在SMT不够用的情况下寻找替代品。

答案 2 :(得分:0)

嗨,@ Gunnar,出于类似的要求,可以根据条件将消息从Debezium发送到不同的主题(单个/多个)。 例如:对于表A到主题A的事件,     对于表B事件到主题B1,主题B2     对于表C事件到主题C1,C2和主题B1等 在源连接器或Regex连接器中,只能在org.apache.kafka.connect.connector.ConnectRecord类中设置一个主题名称。 有没有办法设置多个主题。如前所述,根据一些业务逻辑将一个事件发送到不同的主题。