Kafka Producer - 跟踪 Kerberos 用户

Kafka Producer - Trace Kerberos user

在 Kafka 集群的 Kerberized 设置中,我可以轻松地强制执行主题 X,用户 A 和 B 有权生成消息,而对于主题 Y,用户 C 有权生成消息。

在可追溯性方面,这让我可以保证主题 Y 上的所有消息都是用户 C 生成的。但是,我还想知道主题 X 上的哪些消息是用户 A 生成的,哪些消息是用户 A 生成的由用户 B 制作。

是否可以选择使用生成消息的用户标记每条消息?也许有一句话,我不想在生产者端执行此操作,但想在代理端执行此操作,因此我绝对保证此用户信息存在。

如有任何帮助,我们将不胜感激。

老实说,我认为目前没有办法做到这一点。据我所知,代理中仅有的两个可插入 类 是 KafkaPrincipalBuilder 和 Authorizer,它们都有您想要的主体,但无法访问实际记录以将主体添加到 header 字段或任何需要它的地方。

即使我们查看生产者方面,您也可以自定义拦截器和序列化器 类 这两个选项,它们都可以访问记录,但不能访问用户主体。

如果你真的想强制执行这一点,恐怕你必须变得有点创造性,并做一些事情,比如让他们在 header 字段或类似的东西中用私钥签署每条消息 -在另一端处理数据时,您可以丢弃任何不包含该字段的内容。

除此之外,我认为除了实际更改 Kafka 本身以添加此信息外,您无能为力 - 一般来说 the handleProduceRequest method 应该是一个很好的起点,这里有已授权的请求并且还可以访问包含主体的请求 session。不过,记录在这里仅表示为字节缓冲区,不确定此时是否可以轻松 headers tbh..