我有一个名为 的任务定义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
网络模式。
提前致谢!
我发现使用
awsvpc
网络模式无法做到这一点。我发现完成这项工作的方法是遵循这篇文章,它使用一个 Lambda 函数,每次启动新任务时都会更新 Route53 记录。我在这里做了一个java实现。