Дошла очередь изучения и до Kafka. Решил начать с книги, которая совершенно случайно попалась в нужный момент.
К слову у меня уже был некоторый опыт работы с Kafka, но без углубления в детали.
Однако, после прочтения книги пришел к выводу, что мое понимание Kafka и методики использования значительно отличались от концепций используемых в книге (а следовательно и от концепций самой Kafka).
Иными словами я скептически относился к Kafka и искал простую альтернативу (и нашел Redis Streams
), но книга позволила поближе узнать Kafka и начать ее использовать в правильнмо направлении.
Авторы постепенно знакомят читателя с устройством Apache Kafka
и объясняют механики взаимодействия подчеркивая принципы заложенные в Kafka. Есть примеры клиентов на Java
и работа с командной строкой.
Книга дает общее представление о продукте Kafka и вообще об экосистеме в целом. Не имея опыта использования или имея минимальный опыт, книга должна помочь освоить идеи заложенные в Kafka.
Прикрепляю сборник цитат из книги, все цитаты распределены по разделам, чтобы удобно было освежать память.
Недавно мы рассматривали тему быстрый старт Kafka, теперь пришло время погрузиться в теоретические основы.
В книге 12 глав и 2 приложения (установка и пример клиента).
Сначала авторы кратко знакомят читателя с Kafka, рассказывая о мифах и о том, как можно продать Kafka руководству.
Затем читателя знакомят с концепциями брокера сообщений, которым соответствует большинство брокеров, но слегка уводят тему в сторону Kafka, давая знакомые термины и адаптируя их понимание в контексте Kafka. Это значительно облегчает дальнейшее понимание механик использования.
По ходу дела читатель знакомится с экосистемой Kafka, в которую входят различные open-source
проекты (Kafka Streams
, Kafka Connect
, kSQL
).
В главе 3, авторы преподносят пример возможного проекта с использованием Kafka, раскрывая преимущества использования брокера сообщений.
Следующие главы подробнее углубляются в компоненты системы Kafka, это темы и разделы, брокеры и контроллеры, производители и потребители. Также авторы не упускают из виду инстурменты, такие как Debezium, kcat, Confluent REST Proxy API.
Не обходится стороной вопрос защиты. Но для меня он был не так интересен, потому что большинство использований что мне доводилось видеть были внутри закрытого контура VPN.
А также я для себя открыл такое понятие как модель зрелости (судя по всему это как-то связано с уровнями зрелости управления), которое позволяет понять на каком уровне в нашей компании используется Kafka и каково возможное ее дальнейшее созревание для нас.
Apache Kafka
– это платформа потоковой передачи, которую можно использовать для быстрой обработки большого количества событий.
Линейное чтение и запись – вот основная сфера, где Kafka показывает себя с лучшей стороны и обеспечивает максимально быстрое перемещение данных.
Мне доводилось слышать мнение коллег о том, что Kafka это история о глупом брокере (Kafka) и умном клиенте (где задача брокера передать линейно передать сообщение от клиента клиенту), в том время как RabbitMQ это история об умном брокере (RabbitMQ) и глупом клиенте (где сообщение от клиента клиенту передается через замысловатый роутинг брокера).
Kafka можно использовать как посредника в общении между сервисами в микросервисной архитектуре.
Еще можно сказать что Kafka это распределенный брокер сообщений.
Брокер – это серверный компонент Kafka. Быть брокером Kafka означает иметь возможность координировать свои действия с другими брокерами, а также взаимодействовать с ZooKeeper (примечение: теперь KRaft).
Только один брокер в кластере действует как контроллер. Роль контроллера заключается в управлении кластером. Контроллер также выполняет другие административные действия, такие как переназначение разделов.
Чтобы отправить сообщение, необходимо иметь место, куда оно будет отправлено. Таким местом в Kafka является тема.
Темы состоят из блоков, называемых разделами. Другими словами, одна тема может состоять из одного или нескольких разделов. Что касается фактической реализации Kafka, то она по большей части работает именно с разделами.
Одна из копий раздела (реплика) будет называться ведущей, или лидером. Роль лидера предполагает получение обновлений от внешних клиентов, в то время как простые реплики получают обновления только от соответствующего лидера.
Для каждой группы потребителей конкретный брокер принимает на себя роль координатора группы. Клиент-потребитель соединяется с этим координатором и получает от него назначенный раздел вместе с другими деталями, необходимыми для чтения сообщений.
Производитель – это компонент, отправляющий сообщения в темы Kafka. Производителей по умолчанию не существует.
Потребитель – это программа, которая подписывается на интересующую ее тему или несколько тем.
Все потребители, использующие один тот же идентификатор
group.id
, будут считаться работающими вместе (примечение: группа потребителей), совместно использующими разделы и смещения в теме и составляющими одно логическое приложение.
Книга понравилась, иногда к ней обращаюсь чтобы освежить память. Рекомендую к прочтению.