【发布时间】:2021-08-04 18:49:00
【问题描述】:
我有一个三节点 Kakfa 集群,还有一个三节点 Zookeeper 集群管理它。我对这个集群的配置看起来像
- 节点 1
- IP - 192.168.1.11
- 卡夫卡端口 - 9092
- Zookeeper 端口 - 2181
- 节点 2
- IP - 192.168.1.12
- 卡夫卡端口 - 9092
- Zookeeper 端口 - 2181
- 节点 3
- IP - 192.168.1.13
- 卡夫卡端口 - 9092
- Zookeeper 端口 - 2181
对于每个节点,我都有 Zookeeper 和 Kakfa 配置文件。我的示例 Zookeeper 配置文件看起来像
# Zookeeper server config
dataDir=/tmp/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.11:2889:3889
server.2=192.168.1.12:2889:3889
server.3=192.168.1.13:2889:3889
由于每个 Zookeeper 实例都需要了解彼此的 Zookeeper 实例,而且通常根据我所见,即使在管理大量 Kafka 集群时,通常也只有不到 10 个 Zookeeper 节点。所以在这里我们只需要跟踪 10 个 IP。此外,据我了解,这些 IP 不那么不稳定,并且通常不会经常更改。
对于我的 Kafka 配置文件,我在每个节点上都有以下内容
# Kafka server properties file
broker.id=<ID for this node>
log.dirs=/tmp/kafka-logs
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
zookeeper.connection.timeout.ms=36000
listeners=PLAINTEXT://<IP of this node>:9092
现在对我来说有意义的是,我们引入集群的每个 Kafka 节点都必须了解所有 Zookeeper 节点,以便对其进行管理。但对我来说,问题是当我们扩大或缩小 Kafka 节点时,我们对它们的 IP 不太确定。例如,如果我想创建一个新的 Kafka 主题,我会使用他们提供的 kafka-topics.sh shell 文件并键入类似
kafka-topics.sh --create --topic MyTopic --bootstrap-server <IP of one of the Kafka nodes>
# Could also use the broker-list option instead of bootstrap-server to allow multiple IPs
对我来说问题是,我们永远不知道哪些 Kafka IP 已启动并正在运行,因此将 IP 传递给 --bootstrap-server 似乎是一场猜谜游戏,或者我需要手动检查工作节点的 IP。
那么对于 Kafka,我该如何配置一个静态 IP(可能是虚拟 IP?),以便使用我的 Kafka 集群的其他服务可以始终连接到它?如何为更改 IP 的集群执行服务发现?
【问题讨论】:
标签: apache-kafka architecture apache-zookeeper distributed-system service-discovery