Apache Kafka
Что это
Apache Kafka - это высокопроизводительная система обмена сообщениями для публикации-подписки, реализованная как
распределенная, разделенная, реплицированная служба журнала фиксации. ZooKeeper - для работы с Kafka необходим
координатор. Поэтому вначале стартуем ZooKeeper, затем сервер Kafka.
Для чего
- Проверка сообщения на ошибки
- Маршрутизация конкретному приемнику(ам)
- Разбиение сообщения на несколько маленьких, а затем агрегирование ответов приёмников и отправка результата источнику
- Сохранение сообщений в базе данных
- Вызов веб-сервисов
- Распространение сообщений подписчикам, если используются шаблоны типа издатель-подписчик
Преимущества
- Скорость - один брокер Kafka может обрабатывать сотни мегабайт от чтения и записи в секунду от тысяч
клиентов.
- Масштабируемость - kafka спроектирован таким образом, чтобы один кластер мог служить центральной базой
данных для крупной организации. Он может быть эластично и прозрачно расширен без простоя. Потоки данных
разделяются и распределяются по кластеру машин, чтобы потоки данных превышали возможности любой отдельной
машины и позволяли кластерам скоординированных потребителей.
- Долговечный - сообщения сохраняются на диске и реплицируются внутри кластера, чтобы предотвратить
потерю данных. Каждый брокер может обрабатывать терабайты сообщений без влияния на производительность.
- Распространяется по дизайну - kafka имеет современную кластер-ориентированную конструкцию, которая
обеспечивает надежную прочность и отказоустойчивость.
- Подходит для stream processing и event-driven архитектуры.
Setting
- log.retention.hours - время через сколько будут удаленны данные добавленные в kafka.
По умолчанию одна неделя.
- log.retention.minutes - время через сколько будут удаленны данные добавленные в kafka. По умолчанию
одна неделя.
- log.retention.ms - время через сколько будут удаленны данные добавленные в kafka. По умолчанию одна
неделя.
- log.retention.bytes - объем данный после которого будут удаленны данные добавленные в kafka.
По умолчанию 1 Gb. Значение -1 отключает ограничения.
- offsets.retention.minutes - время через которое kafka забудет какой офсет был брокером.
Common kafka entities
- Kafka cluster - несколько Brokers Kafka под управлением ZooKeeper.
- Broker - сервер kafka который сохраняет данные и обрабатывает записи. Одна единица Kafka.
- Producer - продюсер загружающий данные в kafka топик.
- Consumer - потребитель забирающий данные из kafka топика.
- Topic - раздел в Broker. Аналог очереди.
- Partition - раздел в Topic для параллельной обработки. Нет ограничение на количество, но он требует
ресурсы и рекомендуется э не больше 5000. Желательно иметь столько же consumers. Один Partition может
обслуживать только одного Consumer.
- Key - опциональная часть данных задающаяся producer, по которому определяется Partition(если задана
функция партиционирования). Можно использовать его hash для выбора Partition или в случае ошибки по
ключу определить в каком offset ошибка.
- Value - значение, которое храниться по ключу.
- Consumer group - группы для нескольких consumers(для разделение нагрузки), которые будут отслеживаться
kafka как один consumer.
- offset - уникальный порядковый номер(long) в partition для каждого сообщения. Присваивается kafka
автоматически. Для consumer это “прогресс чтения”.
- Zookeeper - ?
Partition и Consumer
Если 5 Partitions и 10 Consumers
Один Partition может обслуживать только одного Consumer. Если больше Consumers они будут простаивать.
Если 10 Partitions и 5 Consumers
Каждый Consumer обрабатывает 2 Partitions
Подключение
При первом запросе на kafka broker, всегда будет возвращаться список ip и ports всех kafka brokers в Kafka
cluster. Со второго вопроса начнется работа обмена данными.
Программы для мониторинга
- Kafka Tool
- KafkaCat
Ключ
Если 2 сообщения с одним ключем - будет добавлено 2 записи в один partition.
Kafka использует hash(key) % number_of_partitions для определения Partition.