我想在分布式模式下设置一个kafka-connect集群。让我假设这里有4个节点,如下所示:
node1
node2
node3
node4
我想把node1
设置为ADVERTISED_HOST
,我想这就像一个领导者。也将node1
设置为REST_HOST
。所以,当我运行docker容器时,我会为每个节点设置环境变量,比如下面的节点
-e CONNECT_REST_HOST_NAME="node1"
-e CONNECT_REST_PORT="8083"
-e CONNECT_REST_ADVERTISED_HOST_NAME="node1"
-e CONNECT_REST_ADVERTISED_PORT="8083"
然后,我可以从日志中看到类似leaderUrl='http://node1:8083/'
的短语,如下所示:
[2021-04-28 18:24:09,320] INFO Joined group and got assignment: Assignment{error=0, leader='connect-1-303380fb-90ff-4c00-a302-a57ee8b4a0e4', leaderUrl='http://node1:8083/', offset=93, connectorIds=[], taskIds=[test5-0, test5-2]} (org.apache.kafka.connect.runtime.distributed.DistributedHerder)
在这种情况下,我的观点是,
- 我读过文档,在kafka-connect集群中没有领导者,但我认为这个
CONNECT_REST_ADVERTISED_HOST_NAME
设置了一个节点作为领导者;正如您在日志中看到的。我错了吗?如果我误解了,CONNECT_REST_ADVERTISED_HOST_NAME
的确切作用是什么 - 我认为
CONNECT_REST_HOST_NAME
只让一个节点获得所有请求。但当我请求node2、node3或node4时,它们工作得很好。。!所以我想知道这个变量的确切作用是什么 - 最后,如果集群中有领导者,那么领导者节点通常会做什么
所有节点都是平等的,但它们需要一个协议来相互分配任务和报告状态,或者至少向/status端点上的请求客户端报告。当任务分配发生时,领导力只是暂时的——你不会希望一个服务器说";关于任务1,2"的工作;而另一个说";2,3,4〃;
作为一个集群,节点需要知道如何在网络上相互引用,这就是广告属性的用途。另外两个属性设置日志/响应中的名称以及实际绑定的服务器端口
当在代理后面时,公布的端口通常只与其他端口不同