2017-04-11 50 views
1

我正在尝试使用JMX来监视分布式工作器上运行的一组连接器任务。唯一可用的JMX输出似乎是Kafka Consumer MBeans。不幸的是,对工人任务使用的卡夫卡消费者设置可识别的client.id似乎是不可能的。在卡夫卡接收器连接器上设置唯一的客户端ID

该文件建议在connector configuration上使用client.id。在连接器配置上设置此功能不起作用。在工作人员配置(属性文件)上设置此设置仅供工作人员使用配置和状态主题。

看着the code它似乎接收消费者使用前缀consumer.的工人配置。这样做有效,但是这是一个跨工作人员中所有任务的单一客户端ID集合,使得监控单个用户或甚至不可能使用特定的连接器。

默认行为将使用消费者中的默认client.id,该消费者使用consumer-n,其中n是递增数字。 JMX输出不包含此用户所属的groupd.id,因此无法将使用者连接与该工作者中运行的连接器相关联。

没有额外的JMX输出(如groupd.id和连接器名称)或更好的默认client.id我看不到如何使用JMX监视Kafka连接器。

+0

针对JMX标识的唯一client.id问题的解决方法是向代理查询组成员身份,并在连接器中保留默认使用者标识。不理想,因为您需要分别跟踪组成员身份。 –

回答

1

首先,我认为对于设置的位置有些混淆。有两种类型的配置:Corker和Connector。可以在两者中使用少量配置(例如,允许每个连接器覆盖默认的工作级别配置),但大多数情况下它们是不同的:工作级别配置控制整个过程如何操作,而连接器配置特定于个别连接器。

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

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

你是正确的,你可以覆盖consumer.client.id(或者真的是任何生产者或消费者配置),并且它将全面应用于在该工作者中创建的所有客户端。但正如您正确指出的那样,这将是统一的。

简短的回答是,目前这不会很容易覆盖,虽然修复应该是微不足道的(绝对值得)。代码creates producerscreates consumers应至少使用工作组ID和任务ID来生成默认客户端ID并将其添加到配置中(即使您运行多个连接集群,2的组合也能保证唯一ID卡夫卡簇)。

有一个JIRA filed解决这个问题。

+0

谢谢Ewen。这就说得通了。 –