Kafka ProducerInterceptor可以过滤记录吗?

时间:2019-02-18 12:03:48

标签: apache-kafka

Kafka支持拦截器的概念,该概念位于Kafka与使用或生成记录的进程之间,因此可以更改从Kafka读取或写入的记录,或者可以执行自定义日志记录。

据我所知,ConsumerInterceptor允许对记录进行过滤,因为它返回了ConsumerRecords对象,并且实现可以在传递参数之前从容器类中删除(即检查器)项目。记录给消费者。

ProducerInterceptor仅接受并返回ProducerRecord,而不是Optional<ProducerRecord>之类的东西。如果此方法返回的记录为null,会发生什么情况?用例希望防止将记录写入Kafka-通过简单地通过返回null来删除要写入的记录来支持这种情况,还是必须将输入对象变异并将其字段清零?

1 个答案:

答案 0 :(得分:0)

由于需要在onSend上进行此拦截,因此截获会在序列化之前发生,因此您可能会收到SerializationException。如果您处理空值,它可能会为您解决,但您需要确定这是否是正确的选择。如果您想在发生过滤的情况下实质上将空记录发送给Kafka,那么这很有意义。如果您只想删除记录,最好将过滤逻辑放到生产者本身而不是拦截。