有没有办法确定消息来自Kafka主题?

时间:2020-01-29 12:55:53

标签: apache-kafka

有大量数据被推送到我们的Kafka主题之一中,是否有办法确定该数据来自哪个生产者?

3 个答案:

答案 0 :(得分:5)

没有SASL或Authorizer级别的审核,除了通过JMX跟踪已连接的可疑客户端ID之外,没有其他简便的方法。

我建议您采用标准的消息格式,并将其传播给生产者团队。例如,查看Cloudevents规范,其中包括源字段

https://github.com/cloudevents/spec/blob/master/kafka-protocol-binding.md

答案 1 :(得分:4)

您可以启用quotas for the clients/users,然后通过带宽和请求速率两个quota-related JMX MBeans监视哪些客户端受到限制:

指标:每个(用户,客户端ID),用户或客户端ID的带宽配额指标
MBean: kafka.server:type={Produce|Fetch},user=([-.\w]+),client-id=([-.\w]+)
它显示的内容::两个属性。油门时间表示 客户端受到限制的时间(以毫秒为单位)。理想情况下为0。字节速率表示 客户端的数据产生/消耗速率,以字节/秒为单位。对于(用户, client-id)配额,同时指定了user和client-id。如果 每个客户端ID配额适用于客户端,未指定用户。 如果应用了按用户配额,则不指定client-id。

指标:每个(用户,客户端ID),用户或客户端ID的请求配额指标
MBean:kafka.server:type=Request,user=([-.\w]+),client-id=([-.\w]+)
它显示的内容:两个属性。油门时间表示 客户端受到限制的时间(以毫秒为单位)。理想情况下=0。请求时间 指示花费在代理网络和I / O中的时间百分比 线程来处理来自客户端组的请求。对于(用户,客户端ID) 指定了配额,包括用户和客户端ID。如果每个客户端ID配额 适用于客户端,未指定用户。如果每用户配额为 应用,则未指定client-id。

答案 2 :(得分:1)

您可以使用标头,并在产生前在标头中使用硬编码生产者ID!这是我在使用rdkafka的Node.js中所做的事情,java也应该拥有它!