Kafka connect(单消息转换)行过滤

时间:2017-06-08 04:34:21

标签: filter apache-kafka apache-kafka-connect

我读到了kafka 0.10.2.1中引入的Kafka连接转换 https://kafka.apache.org/documentation/#connect_transforms

我注意到所有转换都是基于列的转换。 我有一个用例,我需要基于值的过滤。例如:

考虑一组人的以下数据集:

{"firstName": "FirstName1", "lastName": "LastName1", "age": 30}
{"firstName": "FirstName2", "lastName": "LastName2", "age": 30}
{"firstName": "FirstName3", "lastName": "LastName1", "age": 60}
{"firstName": "FirstName4", "lastName": "LastName2", "age": 60}

我希望我的工作人员过滤掉lastName为LastName2的所有记录

是否可以使用kafka-connect或者我需要为此用例编写单独的程序。

由于

2 个答案:

答案 0 :(得分:2)

没有理由不通过单个消息转换来解决这个问题 - 但是您需要编写自定义消息,因为您所描述的内容无法通过当前发送的转换获得。

这是一个有用的讨论,关于何时使用和不使用SMT:Kafka Summit New York 2017 : Single Message Transformations Are Not the Transformations You’re Looking For (Ewen Cheslack-Postava, Confluent)

答案 1 :(得分:0)

Debezium 1.2附带了一个现成的filtering SMT。它允许使用任何与JSR 223兼容的脚本语言来过滤掉记录,例如像这样:

transforms=filter
transforms.filter.type=io.debezium.transforms.Filter
transforms.filter.language=jsr223.graal.js
transforms.filter.condition=value.lastName == 'LastName2'

请注意,虽然它是Debezium的一部分,但您可以根据需要单独使用该SMT。