预验证发送到 Kafka 主题的消息

Posted

技术标签:

【中文标题】预验证发送到 Kafka 主题的消息【英文标题】:Pre-validate messages sent to Kafka topic 【发布时间】:2017-06-12 16:45:51 【问题描述】:

是否可以验证/过滤发送到 Kafka 主题的消息?

就像,我想确保只有有效的客户/生产者向我的主题发送消息。我当然可以通过基于某些参数/标准丢弃无效消息来在消费者端执行验证。但是,如果我想在将消息写入主题之前执行此操作怎么办。

比如说,Kafka 接收到一条消息,执行一些验证并相应地决定它是否需要丢弃该消息或将该消息写入主题。这可能吗?

【问题讨论】:

是的,您可以验证从客户端到 Kafka 代理的连接。这样,只有“有效”的客户端才能连接和发送消息。 docs.confluent.io/2.0.0/kafka/security.html 【参考方案1】:

简短回答 - 当前版本的 Kafka 不支持开箱即用的此类功能。而且由于 Kafka 生产者被设计为在单个会话期间与多个代理进行通信,因此没有简单的方法来实现这种临时过滤。 仍然存在几个合理的选择:

    使用 2 个主题:一个向所有人开放的“公共”主题,允许所有消息,另一个非公共“过滤”主题,在应用过滤规则后,将由您自己的应用程序使用来自“公共”的数据填充。 如果您绝对需要在写入传入消息之前对其进行验证,那么您可以将实际的 Kafka 代理隐藏在某种形式的代理应用程序后面,该代理应用程序将在将消息写入 Kafka 之前进行验证

【讨论】:

以上是关于预验证发送到 Kafka 主题的消息的主要内容,如果未能解决你的问题,请参考以下文章

发送到kafka主题时序列化消息出错

将多个 oracle 表发送到单个 kafka 主题中

Kafka Connect:如何使用 hdfs sink 连接器将 Kafka 主题的 protobuf 数据发送到 HDFS?

如何将消息发送到 Kafka 中的特定分区?

无法通过java代码向kafka主题发送消息

向 kafka 主题发送消息时出现 TimeoutException