===== Общее ===== **Распределенный** брокер сообщений стриминговых событий\\ Высоконадежный, для высоконагруженных систем, горизонтальное масштабированное, оч популярное решение, много интеграций, написан на Java/Scala\\
:!: Описание | {{:linux:0.png?direct&400|}} | {{:linux:1.png?direct&400|}} | Компоненты:\\ * **Broker** - сервер/node, прием/хранение/передача сообщений, их обычно несколько, объединяются в кластер * **Zookeeper** - рабочая БД для хранения состояния, конфигурации и т.д., самостоятельный инструмент (оч быстрое чтение данных) * **Message (Record)** - передаваемые сообщения * **Topic/Partition** - "ящики" куда складываются данные * **Producer** - отправитель * **Consumer** - получатель | **Сообщения** | **Топики** | | {{:linux:3.png?direct&400|}} | {{:linux:5.png?direct&400|}} | ** Хранение сообщений **\\ Получаемые брокером сообщения хранятся в лог файлах, папка "./logs", содержит подпапки для топиков, партиций, с соответствующими именами\\ Набор "рабочих" файлов, в которые пишется в данный момент, называется **сегментом**, сегмент состоит из трех файлов с разным расширением, со временем они ротируются в зависимости от размера, в именах файлов указаны номера п/п сообщений, с какого номера сообщений пишутся в данный сегмент\\ ** Репликация **\\ (replication-factor: count)\\ Данные реплицируются на брокерах, партициями, каждая партиция находится минимум в двух экземплярах на разных брокерах\\ Для согласованности дубликатов (т.к. есть запоздания) одна из реплик является основной, остальные подчиненные, основные реплики назначаются сервером-контроллером из кластера\\ Чтение/запись происходит только с лидер-репликой, затем, синхронно, для нивелирования отставаний, идет запись в ISR реплики ("подчиненные+" так сказать), настраивается вручную, они первые кандидаты в лидеры\\ {{:linux:6.png?direct&400|}} **Producer (отправка)**\\ {{:linux:7.png?direct&400|}} **Consumer (получение)**\\ {{:linux:8.png?direct&400|}}
:!: Еще описание Программный брокер сообщений, т.е. приложение, которое принимает данные от другой программы, хранит их в своей базе и отдает информацию другой программе.\\ Kafka с открытым исходным кодом, разработкой занимается Apache Software Foundation\\ **Область применения** сфокусирована в отраслях, где требуются сбор, обработка, безопасное хранение и передача больших объемов данных, например такие как онлайн-игры, соц сети, банковские системы, гео системы и т.д.\\ **Архитектурно** в процессе работы Kafka участвуют следующие сущности: * **Продюсер** - то что генерирует и посылает данные брокеру * **Потребитель** - тот, кто принимает отправленные продюсером сообщения * **Сообщения** - сами данные * **Брокер** - узел передачи данных * **Топики (тема)** - хранилище сгруппированных сообщений (по разным признакам) из которого потребитель извлекает необходимую ему информацию **Преимущества**\\ * Возможность долгого хранения данных * Бесплатные и открытые исходники * Алгоритмы работы заточены на высокую производительность * Механизмы защиты данных (?) * Возможность работы в режиме кластера, простая масштабируемость (горизонтальная) Ближайший **аналог** это RabbitMQ, основные отличия\\ * Способы доставки сообщений, Kafka использует **pull** (получатель сам достает сообщения), а RabbitMQ **push** (брокер сам отправляет сообщение) * Kafka хранит данные до установленного администратором срока, Rabbit удаляет после отправки получателю * При высоких нагрузках Rabbit проигрывает в производительности из-за реализованного гибкого управления