У меня есть определение задачи под названием 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
сетевой режим. Я нашел способ выполнить эту работу, следуя Эта статья, который использует лямбда-функцию, обновляющую записи Route53 при каждом запуске новой задачи. Я сделал Java-реализацию этого Вот.