Комментарии 2
А чего кафки-то только две? Раз уж три ноды решили разворачивать.
Готов поспорить с автором что это не кластер и что при падении одной ноды у него отвалится часть консьюмеров.
1. Ни когда, вообще никогда не разворачивайте три zookeeper-а на одной машине. Автор либо не понимает что он делает, либо не сказал об этом. Нечетное количество зоокиперов позволяет избежать сплитбрэйна. А так же позволяет кластеру сохранять свое консистенотное состояние. Ляжет нода с зоокиперами, все кафки превратятся в тыкву.
2. Как только у тебя ляжет хоть одна нода с кафкой. Часть сервисов продолжит нормально работать, а часть встанет раком. И новые сервисы будут вести себя примерно так же. В библиотеке питона, даже не удосужились причину кинуть в эксепшен. Только у нас в элексире я увидел что клиент орет на то что не найден координатор групп. А причина вот в чем. С недавних пор смещение по топикам стали хранить в так называемом системном топике __consumer_offsets. Но дело в том что по оф. доке он должен реплицироваться в 3 реплики, а на самом деле? Фактор репликации у него 1. Нода гасится и теряет все смещения своих консьюмеров и они уже ни когда нормально не заработают.
Варианта тут 2. Первый задать на новом сервере переменную offsets.topic.replication.factor=3, но это сработает только до первого запуска. Второй выполнить скрипт на уже работающем сервере:
Вот скриншоты оф. доки и гита по состоянию на 2021.04.22
Придется оставит ссылки. Шёл 2021 год, а у хабра до сих пор мегаотстойный движок, который глючит даже при добавлении картинок.
ibb.co/8519YGB
ibb.co/Pm9J6HF
1. Ни когда, вообще никогда не разворачивайте три zookeeper-а на одной машине. Автор либо не понимает что он делает, либо не сказал об этом. Нечетное количество зоокиперов позволяет избежать сплитбрэйна. А так же позволяет кластеру сохранять свое консистенотное состояние. Ляжет нода с зоокиперами, все кафки превратятся в тыкву.
2. Как только у тебя ляжет хоть одна нода с кафкой. Часть сервисов продолжит нормально работать, а часть встанет раком. И новые сервисы будут вести себя примерно так же. В библиотеке питона, даже не удосужились причину кинуть в эксепшен. Только у нас в элексире я увидел что клиент орет на то что не найден координатор групп. А причина вот в чем. С недавних пор смещение по топикам стали хранить в так называемом системном топике __consumer_offsets. Но дело в том что по оф. доке он должен реплицироваться в 3 реплики, а на самом деле? Фактор репликации у него 1. Нода гасится и теряет все смещения своих консьюмеров и они уже ни когда нормально не заработают.
Варианта тут 2. Первый задать на новом сервере переменную offsets.topic.replication.factor=3, но это сработает только до первого запуска. Второй выполнить скрипт на уже работающем сервере:
ZOOKEEPER_CONNECT=localhost:2181
./kafka-reassign-partitions.sh --zookeeper $ZOOKEEPER_CONNECT \
--reassignment-json-file ./inc-replication-factor.json \
--execute
./kafka-reassign-partitions.sh --zookeeper $ZOOKEEPER_CONNECT \
--reassignment-json-file ./inc-replication-factor.json \
--verify
./kafka-topics.sh --zookeeper $ZOOKEEPER_CONNECT --describe --topic __consumer_offsets
inc-replication-factor.json
{«version»:1,
«partitions»:[
{«topic»:"__consumer_offsets", «partition»:0, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:1, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:2, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:3, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:4, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:5, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:6, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:7, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:8, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:9, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:10, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:11, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:12, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:13, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:14, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:15, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:16, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:17, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:18, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:19, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:20, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:21, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:22, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:23, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:24, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:25, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:26, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:27, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:28, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:29, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:30, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:31, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:32, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:33, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:34, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:35, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:36, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:37, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:38, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:39, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:40, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:41, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:42, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:43, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:44, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:45, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:46, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:47, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:48, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:49, «replicas»:[2, 3, 1]}
]
}
«partitions»:[
{«topic»:"__consumer_offsets", «partition»:0, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:1, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:2, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:3, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:4, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:5, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:6, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:7, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:8, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:9, «replicas»:[3, 1, 2]},
{«topic»:"__consumer_offsets", «partition»:10, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:11, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:12, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:13, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:14, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:15, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:16, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:17, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:18, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:19, «replicas»:[1, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:20, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:21, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:22, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:23, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:24, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:25, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:26, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:27, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:28, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:29, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:30, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:31, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:32, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:33, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:34, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:35, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:36, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:37, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:38, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:39, «replicas»:[3, 2, 3]},
{«topic»:"__consumer_offsets", «partition»:40, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:41, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:42, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:43, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:44, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:45, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:46, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:47, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:48, «replicas»:[2, 3, 1]},
{«topic»:"__consumer_offsets", «partition»:49, «replicas»:[2, 3, 1]}
]
}
Вот скриншоты оф. доки и гита по состоянию на 2021.04.22
Придется оставит ссылки. Шёл 2021 год, а у хабра до сих пор мегаотстойный движок, который глючит даже при добавлении картинок.
ibb.co/8519YGB
ibb.co/Pm9J6HF
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Конфигурация кластера из трех узлов ZooKeeper и брокеров Apache Kafka