在使用Kafka集群的kerberized设置中,我可以很容易地强制主题X,用户A和B有权产生消息,而对于主题Y,用户C有权产生消息。
在可追溯性方面,这保证了主题Y上的所有消息都是由用户C生成的。但是,我还想知道主题X上的哪些消息是由用户A生成的,哪些消息是由用户B生成的。
有没有为每条消息添加标签的选项?也许有一句话,我不想在生产者端这样做,但我想在代理端强制执行它,所以我有一个绝对的保证,这个用户信息是存在的。
任何帮助都将不胜感激。
发布于 2018-02-22 06:45:51
老实说,我认为目前还没有办法做到这一点。据我所知,代理中仅有的两个可插入类是KafkaPrincipalBuilder和Authorizer,这两个类都有您想要的主体,但无法访问实际记录,无法将主体添加到标头字段中或需要它的任何位置。
即使我们看一下生产者端,那里的两个选项也是您可以自定义的Interceptor和Serializer类,这两个类都可以访问记录,但不能访问用户主体。
如果你真的想强制执行这一点,我担心你必须变得有点创造性,并做一些类似的事情,比如让他们用头字段中的私钥来签署每条消息-当在另一端处理数据时,你可以丢弃任何不包含该字段的消息。
除此之外,我认为除了实际更改Kafka本身来添加此信息之外,您可以做的并不多-通常情况下,the handleProduceRequest method应该是一个很好的起点,在这里,您有已被授权的请求,也可以访问包含主体的请求会话。不过,记录在这里只表示为bytebuffer,不确定您是否可以轻松地在这一点tbh..
https://stackoverflow.com/questions/48911585
复制相似问题