В этом блоге я расскажу о том, какие проблемы возникают при использовании конвейеров данных для установления соединения между серверами в сети и как система обмена сообщениями Kafka решает эту проблему.
Необходимость в системе обмена сообщениями
В сценарии реального времени у нас есть различные сервисы системных процессов, которые будут взаимодействовать друг с другом. А конвейеры данных — это те, которые устанавливают соединения между двумя серверами или двумя системами.
Возьмем пример веб-сайта электронной коммерции, у него есть несколько серверов для внешнего интерфейса, например, сервер приложений для размещения приложений, серверы чата для общения с клиентами, отдельные серверы для оплаты и т. д. Аналогичным образом, организации также могут иметь несколько серверов на задней стороне, которые будут получать сообщения от различных внешних серверов в зависимости от требований. Например, у них могут быть серверы баз данных, которые будут хранить записи, системы безопасности для аутентификации и авторизации пользователей, серверы мониторинга в режиме реального времени и т.д. Таким образом, все эти конвейеры данных становятся сложными при увеличении количества систем. А добавление новой системы или сервера требует дополнительных трубопроводов данных, что снова усложняет поток данных. Теперь управление этими конвейерами данных также становится очень сложным, поскольку каждый конвейер данных имеет свой набор требований. Например, конвейеры данных, обрабатывающие транзакции, должны быть более отказоустойчивыми и надежными. Из-за этой сложности и возникла «система обмена сообщениями». Система обмена сообщениями снижает сложность конвейеров данных и делает коммуникацию между системами более простой и управляемой. Используя систему обмена сообщениями, вы можете быстро устанавливать удаленные соединения и отправлять данные по сети.
Давайте посмотрим, как Kafka решает эту проблему. Kafka развязывает конвейер данных и решает проблему сложности. Приложения, которые производят сообщения в Kafka, называются «производителями», а приложения, которые потребляют эти сообщения из Kafka, называются «потребителями».
На приведенной выше диаграмме Web-Client, Application-1, Application-2 и т.д. производят сообщения в Kafka. Они называются производителями. Затем серверы баз данных, системы безопасности, мониторинг в реальном времени и т.д. в основном потребляют сообщения и называются потребителями. Итак, производители отправляют сообщения в Kafka, Kafka хранит эти сообщения, а потребители, которым нужны эти сообщения, могут подписаться и получать их.
В этом рабочем процессе несколько потребителей могут потреблять одни и те же серверы приложений, подписываясь на них, а также добавлять новый сервис или систему и удалять существующую систему очень просто.
Что такое Kafka?
Apache Kafka — это распределенная система обмена сообщениями с открытой подпиской. Традиционно обмен сообщениями имеет две модели. Это очередь и публичная подписка. В очереди пул потребителей может читать с сервера, и каждая запись попадает только к одному из них. В то время как при Public-Subscribe запись рассылается всем потребителям, так что несколько потребителей могут получить эти записи.
Kafka быстрее, масштабируемее и отказоустойчивее, поскольку кластер Kafka распределен и имеет несколько машин, работающих параллельно. Изначально он был разработан в LinkedIn, а затем стал частью фонда Apache.
Терминология Kafka
1 . Тема
Тема — это категория или имя фида, в который публикуются записи. Темы в Kafka всегда многоабонентские. Это означает, что у темы может быть ноль, один или много потребителей, которые подписываются на данные, записанные в нее.
2 . Разделы
Темы Kafka делятся на несколько разделов. Разделы позволяют распараллелить тему, разделив данные в конкретной теме между несколькими брокерами. Это означает, что каждый раздел может быть размещен на отдельных машинах, чтобы позволить различным потребителям читать из темы параллельно.
Например, у вас есть тема продаж с 3 разделами — раздел-0, раздел-1 и раздел-2. Таким образом, всегда 3 потребителя могут читать данные параллельно.
3 . Производители
Производители публикуют данные в темах по своему выбору. Производитель отвечает за выбор записи, которую следует отнести к тому или иному разделу темы.
4 . Потребители
Потребители обозначают себя именем группы потребителей, и каждая запись, опубликованная в теме, доставляется одному экземпляру потребителя в каждой подписавшейся группе потребителей. Экземпляры потребителей могут находиться в отдельных процессах или на отдельных машинах.
5 . Брокеры
Кластер Kafka представляет собой набор серверов, каждый из которых называется брокерами.
6 . Zookeeper
Zookeeper — это еще один проект Apache с открытым исходным кодом, он хранит метаданные, относящиеся к кластеру Kafka, такие как информация о брокерах, информация о темах и т.д.. Таким образом, Zookeeper — это тот, кто управляет всем кластером Kafka.
Основные команды Kafka
Это основные команды Kafka для создания и потребления сообщений.
Перейти к домашней странице kafka,
- Создайте новую тему:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3--topic [scenario]
- Список существующих тем:
bin/kafka-topics.sh --zookeeper localhost:2181 --list
- Описать тему:
bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic mytopic
- Удалить тему:
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic mytopic
- Очистить тему:
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic mytopic --delete-config retention.ms
- Потребление сообщений с помощью консольного потребителя:
bin/kafka-console-consumer.sh --new-consumer --bootstrap-server localhost:9092 --topic mytopic --from-beginning
- Список групп потребителей, известных Kafka:
bin/kafka-consumer-groups.sh --zookeeper localhost:2181 --list
(Или)
bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --list
- Просмотр сведений о группе потребителей:
bin/kafka-consumer-groups.sh --zookeeper localhost:2181 --describe --group <group name>
Заключение
В этой статье я рассказал о проблемах использования конвейеров данных и о том, как система обмена сообщениями Kafka решает эти проблемы. Кроме того, я объяснил некоторые важные команды и термины Kafka.
Надеюсь, это будет полезно.