【问题标题】:Setting a unique client-id on a Kafka Sink Connector在 Kafka Sink 连接器上设置唯一的客户端 ID
【发布时间】:2017-09-07 10:39:07
【问题描述】:

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

文档建议在connector configuration 上使用client.id。在连接器配置上设置它没有效果。在工作人员配置(属性文件)上设置此项仅将其设置为供工作人员用于配置和状态主题。

查看the code,似乎接收器消费者使用带有前缀consumer. 的工作人员配置。这样做是可行的,但这是在 Worker 中的所有任务中设置的单个客户端 ID,因此无法监控单个消费者,甚至是特定的连接器。

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

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

【问题讨论】:

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

标签: apache-kafka


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 谢谢伊文。这是有道理的。
【解决方案2】:

从 Apache Kafka 2.3 和 KIP-411 开始,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 

(为了便于阅读,删除了一些列)

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 2021-10-13
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2016-12-18
    • 2017-08-04
    • 2020-12-20
    相关资源
    最近更新 更多