Apache kafka 在Kafka接收器连接器上设置唯一的客户端id

Apache kafka 在Kafka接收器连接器上设置唯一的客户端id,apache-kafka,Apache Kafka,我正在尝试使用JMX监视一组在分布式工作程序上运行的连接器任务。唯一可用的JMX输出似乎是Kafka消费者MBean。不幸的是,在worker任务正在使用的Kafka使用者上设置可识别的client.id似乎是不可能的 文档建议在上使用client.id。在连接器配置上设置此选项无效。在worker配置属性文件上设置此选项仅可将其设置为worker用于配置和状态主题 现在看来,接收器使用者似乎使用了前缀为consumer的worker配置。。这样做是可行的,但这是在worker中的所有任务中设置

我正在尝试使用JMX监视一组在分布式工作程序上运行的连接器任务。唯一可用的JMX输出似乎是Kafka消费者MBean。不幸的是,在worker任务正在使用的Kafka使用者上设置可识别的client.id似乎是不可能的

文档建议在上使用client.id。在连接器配置上设置此选项无效。在worker配置属性文件上设置此选项仅可将其设置为worker用于配置和状态主题

现在看来,接收器使用者似乎使用了前缀为consumer的worker配置。。这样做是可行的,但这是在worker中的所有任务中设置的单个客户端id,因此无法监视单个使用者,甚至无法监视特定的连接器

默认行为将在使用者中使用默认的client.id,即使用consumer-n,其中n是递增的数字。JMX输出不包括此使用者所属的groupd.id,因此无法将使用者连接与该辅助进程中运行的连接器关联起来


如果没有额外的JMX输出,比如groupd.id和connector name,或者更好的默认client.id,我就看不出如何使用JMX监控Kafka连接器

首先,我认为设置的位置有点混乱。有两种配置:塞瓶器和连接器。有少量配置可在这两种情况下使用,例如允许每个连接器覆盖默认工作人员级别配置,但在大多数情况下,它们是不同的:工作人员级别配置控制整个流程的运行方式,而连接器配置特定于单个连接器

从逻辑上讲,一个连接集群将运行许多您可能希望独立处理的客户机,我认为这就是您的问题所在。客户机的类型包括源任务生产者、接收器任务消费者以及框架级别的客户机工作者

您提供的第一个链接是关于Kafka Connect worker配置的。出现client.id是因为工作人员通过消费者使用的相同组协调协议相互协调。因此,您将在Worker配置中指定的client.id类似于我的kafka connect cluster Worker,表示与Worker操作关联的流量与connect集群的Worker关联

您可以覆盖consumer.client.id或任何生产者或消费者配置,这是正确的,它将全面应用于在该worker中创建的所有客户端。但正如您正确指出的,这将是一致的

简单的回答是,目前这将不容易覆盖,尽管修复应该是微不足道的,并且绝对值得进行。该代码至少应使用工作组ID和任务ID来生成默认客户端ID,并将其添加到配置中。即使针对同一Kafka群集运行多个connect群集,2的组合也可确保ID唯一


解决这个问题有一个很好的方法。

首先,我认为设置的位置有点混乱。有两种配置:塞瓶器和连接器。有少量配置可在这两种情况下使用,例如允许每个连接器覆盖默认工作人员级别配置,但在大多数情况下,它们是不同的:工作人员级别配置控制整个流程的运行方式,而连接器配置特定于单个连接器

从逻辑上讲,一个连接集群将运行许多您可能希望独立处理的客户机,我认为这就是您的问题所在。客户机的类型包括源任务生产者、接收器任务消费者以及框架级别的客户机工作者

您提供的第一个链接是关于Kafka Connect worker配置的。出现client.id是因为工作人员通过消费者使用的相同组协调协议相互协调。因此,您将在Worker配置中指定的client.id类似于我的kafka connect cluster Worker,表示与Worker操作关联的流量与connect集群的Worker关联

您可以覆盖consumer.client.id或任何生产者或消费者配置,这是正确的,它将全面应用于在该worker中创建的所有客户端。但正如您正确指出的,这将是一致的

简单的回答是,目前这将不容易覆盖,尽管修复应该是微不足道的,并且绝对值得进行。该代码至少应使用工作组ID和任务ID来生成默认客户端ID,并将其添加到配置中。即使针对同一Kafka群集运行多个connect群集,2的组合也可确保ID唯一

有一个f
或解决此问题。

从Apache Kafka 2.3开始,client.id被设置为连接器id+任务,如图所示,一个连接器有三个任务,其中一个主题有十个分区:

$ docker exec -it kafka kafka-consumer-groups --bootstrap-server localhost:29092 --describe --group connect-sink-elastic-orders-00-A

GROUP                            TOPIC    PARTITION  CLIENT-ID 
connect-sink-elastic-orders-00-A orders2  0          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  1          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  2          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  3          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  4          connector-consumer-sink-elastic-orders-00-A-1 
connect-sink-elastic-orders-00-A orders2  5          connector-consumer-sink-elastic-orders-00-A-1 
connect-sink-elastic-orders-00-A orders2  6          connector-consumer-sink-elastic-orders-00-A-1 
connect-sink-elastic-orders-00-A orders2  7          connector-consumer-sink-elastic-orders-00-A-2 
connect-sink-elastic-orders-00-A orders2  8          connector-consumer-sink-elastic-orders-00-A-2 
connect-sink-elastic-orders-00-A orders2  9          connector-consumer-sink-elastic-orders-00-A-2 

从Apache Kafka 2.3开始,为了可读性而删除了一些列

,client.id被设置为connector id+任务,如下所示,对于具有三个任务的单个连接器,一个主题包含十个分区:

$ docker exec -it kafka kafka-consumer-groups --bootstrap-server localhost:29092 --describe --group connect-sink-elastic-orders-00-A

GROUP                            TOPIC    PARTITION  CLIENT-ID 
connect-sink-elastic-orders-00-A orders2  0          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  1          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  2          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  3          connector-consumer-sink-elastic-orders-00-A-0 
connect-sink-elastic-orders-00-A orders2  4          connector-consumer-sink-elastic-orders-00-A-1 
connect-sink-elastic-orders-00-A orders2  5          connector-consumer-sink-elastic-orders-00-A-1 
connect-sink-elastic-orders-00-A orders2  6          connector-consumer-sink-elastic-orders-00-A-1 
connect-sink-elastic-orders-00-A orders2  7          connector-consumer-sink-elastic-orders-00-A-2 
connect-sink-elastic-orders-00-A orders2  8          connector-consumer-sink-elastic-orders-00-A-2 
connect-sink-elastic-orders-00-A orders2  9          connector-consumer-sink-elastic-orders-00-A-2 

为了可读性而删除了一些列

JMX标识的唯一client.id问题的解决方法是查询代理的组成员资格,并在连接器中保留默认的使用者id。这并不理想,因为您需要单独跟踪组成员身份。解决JMX标识的唯一client.id问题的一个方法是查询代理的组成员身份,并在连接器中保留默认的使用者id。不太理想,因为您需要单独跟踪组成员。谢谢Ewen。这是有道理的。谢谢你。这是有道理的。