我有一个名为的任务定义kafka-zookeeper
,其中有一个 Apache Kafka 代理和一个 Zookeeper 节点。这些容器需要相互通信(这很容易),并且需要与其他 kafka-zookeeper 任务中的 kafka 和 zookeeper 容器进行通信,但我不知道该怎么做。
基本上,我需要这个:
------------------------
___________________ | ___________________ | ___________________
| Task1 | | | Task2 | | | Task2 |
|(kafka-zookeeper)| | |(kafka-zookeeper)| | |(kafka-zookeeper)|
| _____________ | | | _____________ | | | _____________ |
| | |<------ | | | | --->| | |
| | Kafka |<-------->| Kafka |<-------->| Kafka | |
| |___________| | | |___________| | | |___________| |
| ^ | | ^ | | ^ |
| | | | | | | | |
| _____v_______ | | ______v______ | | ______v______ |
| | | | | | | | | | | |
| | Zookeeper |<-------->| Zookeeper |<-------->| Zookeeper | |
| |___________|<------ | |___________| | --->|___________| |
|_________________| | |_________________| | |_________________|
| |
------------------------
但我不知道如何设置任务之间的通信,因为任务的私有 IP 在启动后就已确定。此外,如果某个任务由于某种原因失败,则当创建另一个任务来代替它时,IP 将会不同。我该如何处理这个问题?
我还认为值得一提的是,zookeeper 和 kafka 通过包含其他实例的 IP 的环境变量了解其他实例。
由于我使用的是网络模式,因此我无法为容器提供主机名awsvpc
。
提前致谢!