更改 zookeeper 中的 Kafka 主机名条目并在风暴拓扑重新启动时保持它
Changing Kafka Host name entry in zookeeper and persisting it across storm topology restart
背景
- 6节点Kafka集群
- 3 节点 Zookeeper 集群
- 3 节点 Nimbus 集群
- Apache Storm Worker 主机使用 amazon spot fleet 动态调整
场景
对于它订阅的给定分区的特定拓扑,Zookeeper 条目如下所示
{"topology":{"id":"Topology_Name-25-1520374231","name":"Topology_Name"},"offset":217233,"partition":0,"broker":{"host":"Zk_host_name","port":9092},"topic":"topic1"}
现在,为了让工作主机访问 Zk_host_name
,在 /etc/hosts
文件中的每个工作主机上添加了一个映射,作为 ip ZK_host_name
现在我们决定转向由 AWS 提供的名为 Route 53
的 DNS 管理服务。这样就可以设置一个固定的名称如QA-ZK-Host1
并映射到相应的ip。这样以后可以更改 ip,从而提供灵活性。
为了保持一致性,现在需要更改上面的原始条目。因此相应的拓扑被停止,以避免持续更改偏移量并使用 set
命令更改主机名的值。
set /node_path {"topology":{"id":"Topology_Name-25-1520374231","name":"Topology_Name"},"offset":217233,"partition":0,"broker":{"host":"QA-ZK-Host1","port":9092},"topic":"topic1"}
问题
上面的命令工作正常,路径上的 get
命令给出了更改后的值。但是拓扑重新启动时,旧名称将恢复。
那么如何让它在拓扑重启后仍然存在。
您引用的对象正在此处写入 Storm 的 Zookeeper https://github.com/apache/storm/blob/master/external/storm-kafka/src/jvm/org/apache/storm/kafka/PartitionManager.java#L341。
"broker" 属性 创建于 https://github.com/apache/storm/blob/master/external/storm-kafka/src/jvm/org/apache/storm/kafka/DynamicBrokersReader.java#L186. As you can see, the host property is not your Zookeeper host, but the host running Kafka. The value is being read from Kafka's Zookeeper (see point 3 at https://cwiki.apache.org/confluence/display/KAFKA/Kafka+data+structures+in+Zookeeper)。
如果您想更改该值,您可能需要在 Kafka 中进行。查看 http://kafka.apache.org/090/documentation.html(或您使用的任何版本)并搜索 "advertised.host.name",我认为这是您要更改的设置。
背景
- 6节点Kafka集群
- 3 节点 Zookeeper 集群
- 3 节点 Nimbus 集群
- Apache Storm Worker 主机使用 amazon spot fleet 动态调整
场景
对于它订阅的给定分区的特定拓扑,Zookeeper 条目如下所示
{"topology":{"id":"Topology_Name-25-1520374231","name":"Topology_Name"},"offset":217233,"partition":0,"broker":{"host":"Zk_host_name","port":9092},"topic":"topic1"}
现在,为了让工作主机访问 Zk_host_name
,在 /etc/hosts
文件中的每个工作主机上添加了一个映射,作为 ip ZK_host_name
现在我们决定转向由 AWS 提供的名为 Route 53
的 DNS 管理服务。这样就可以设置一个固定的名称如QA-ZK-Host1
并映射到相应的ip。这样以后可以更改 ip,从而提供灵活性。
为了保持一致性,现在需要更改上面的原始条目。因此相应的拓扑被停止,以避免持续更改偏移量并使用 set
命令更改主机名的值。
set /node_path {"topology":{"id":"Topology_Name-25-1520374231","name":"Topology_Name"},"offset":217233,"partition":0,"broker":{"host":"QA-ZK-Host1","port":9092},"topic":"topic1"}
问题
上面的命令工作正常,路径上的 get
命令给出了更改后的值。但是拓扑重新启动时,旧名称将恢复。
那么如何让它在拓扑重启后仍然存在。
您引用的对象正在此处写入 Storm 的 Zookeeper https://github.com/apache/storm/blob/master/external/storm-kafka/src/jvm/org/apache/storm/kafka/PartitionManager.java#L341。
"broker" 属性 创建于 https://github.com/apache/storm/blob/master/external/storm-kafka/src/jvm/org/apache/storm/kafka/DynamicBrokersReader.java#L186. As you can see, the host property is not your Zookeeper host, but the host running Kafka. The value is being read from Kafka's Zookeeper (see point 3 at https://cwiki.apache.org/confluence/display/KAFKA/Kafka+data+structures+in+Zookeeper)。
如果您想更改该值,您可能需要在 Kafka 中进行。查看 http://kafka.apache.org/090/documentation.html(或您使用的任何版本)并搜索 "advertised.host.name",我认为这是您要更改的设置。