是否可以将SMT(单个消息转换)仅应用于来自指定主题的消息

时间:2019-04-11 13:24:07

标签: mysql apache-kafka apache-kafka-connect debezium

我正在使用Debezium MySql连接器将数据库更改事件从MySql数据库流式传输到Kafka。我需要对某些指定的表(而不是其他表)的记录进行特定的转换。是否可以仅使用Kafka Connect单消息转换(不使用Kafka流或KSQL)来做到这一点?我什至不介意编写自定义SMT。但是我找不到如何指定要从哪些表/主题应用SMT的消息。谢谢。

[UPD]经过简短的调查,我决定为此使用KSQL。谢谢大家的回答

2 个答案:

答案 0 :(得分:1)

如果要实现自定义SMT,则可以简单地检查传入记录的主题,而只返回那些不希望应用转换逻辑的未更改记录。

答案 1 :(得分:0)

您不能仅将SMT应用于特定主题。连接器,无论是接收器还是源,总是将已定义的SMT应用于它处理的每个消息。

有一个选项可以使SMT具有一些复杂的逻辑,并取决于消息中的某些数据(主题名称分区号,键等)是否起作用。不建议使用描述方法,因为SMT应该进行轻量级处理(对于更复杂的情况,应使用Kafka Streams)。这就是 bool textCanceled = false; private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) { if (!Char.IsDigit((char)e.Key)) textCanceled = true; else textCanceled = false; } private void TextBox_BeforeTextChanging(TextBox sender, TextBoxBeforeTextChangingEventArgs args) { args.Cancel = textCanceled; } 中的SMT没有这样的逻辑的原因。

如果仅将SMT应用于特定主题,则可以为每个表(主题)创建不同的连接器。