IT-KB 🤖
6.81K subscribers
636 photos
76 videos
6 files
787 links
Бесплатное обучение по Windows, Linux, сети, программирование, DevOps от IT-KB.RU

Наши ресурсы:
Блог -> it-kb.ru
Wiki -> wiki.it-kb.ru
Соц.сети -> vk.com/blogitkb
Купить рекламу: https://telega.in/c/ITKB_channel

💾 - @ITKB_Archive

👨‍💻 @itkb_ceo 👀
加入频道
Kafka для самых маленьких разработчиков, аналитиков и тестировщиков

Несколько лет назад произошел Kafka-хайп. Kafka хотели использовать все, не всегда понимая, для чего конкретно она им нужна. И сегодня многие продолжают брать Kafka в свои проекты, зачастую ожидая, что её применение само по себе сделает всё лучше.


С одной стороны, это может быть и хорошо. Такие шаги стимулируют индустрию. Но всё же лучше понимать, что ты делаешь, иначе проекту можно сделать только хуже. В этой статье я обращаюсь к разработчикам, аналитикам и тестировщикам, которые еще не сталкивались с Kafka по работе. Помогу понять, почему все же в микросервисной среде многие не ходят просто по REST, а используют этот инструмент - что конкретно делает Kafka и когда есть смысл её применять.


⚠️Предостережения

Если на проекте появилась Kafka, лучше заложить время на то, чтобы подробнее ее поизучать. С Kafka может происходить много разной дичи. Если есть что-то, что может пойти не так, рано или поздно оно обязательно пойдет не так. Поэтому нужно понимать, что вы делаете.
Достоинство и одновременно недостаток Kafka - это ее гибкость. Вы можете настроить очень много пользовательских сценариев. Но важно понимать, что все здесь как в Linux - вам придется это именно настраивать. Ее нельзя просто взять и использовать в своих целях, потому что велика вероятность, что что-то будет работать не так, и поначалу вы даже не будете подозревать об этом. Вы узнаете позже, через боль, ошибки и потери.
Одно дело - настраивать сбор логов через Kafka. В этом кейсе мы собираем очень много данных, которые не боимся потерять. Другой кейс - оплата через Kafka в финтехе. В этом случае сообщения вообще нельзя терять, нельзя снять оплату два раза или вывалиться из определенного тайминга. Это совершенно разные кейсы, в рамках которых к Kafka надо подходить по-разному.



💠 Проблема двух генералов...

#Linux #Kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
Инструменты Kafka

→ kcat (
Kafka-CLI) 
Командная утилита для взаимодействия с Kafka-кластером через API. Позволяет производить и потреблять сообщения, запрашивать метаданные топиков и управлять группами консумеров с помощью CLI команд.

 
→ Prometheus и Grafana для мониторинга 
Prometheus собирает ключевые метрики производительности Kafka: статусы брокеров, репликация партиций, латентность, а Grafana визуализирует их в виде дашбордов, позволяя настраивать алертинг и следить за SLA в реальном времени.

 
Kafka UI  
Веб-интерфейсы, такие как Kafka Manager, предоставляют графический доступ для управления топиками, мониторинга брокеров, репликации партиций и отслеживания состояния консумер-групп. Это упрощает администрирование распределённого кластера.


Kafka Connect
Упрощает интеграцию Kafka с внешними системами, автоматизируя процессы передачи данных. Вместо разработки кастомных ETL-пайплайнов, Kafka Connect позволяет настроить и запустить коннекторы для потоковой передачи данных в ваш Kafka-кластер или их извлечение за секунды.


Kafka Streams
Нужен для разработки высокопроизводительных приложений потоковой обработки данных в реальном времени. Он предоставляет высокоуровневые абстракции для работы с потоками данных, включая такие задачи, как фильтрация, агрегация, трансформации и объединение потоков, с поддержкой распределённой обработки и горизонтального масштабирования.


#Kafka #DevOps
👍103
Сравнение RabbitMQ vs Kafka

🙄Публикуем информацию отдельно про Kafka и отдельно про RabbitMQ?
Да 👍/ Нет 👾


#RabbitMQ #Kafka #DevOps
👍542👾2
Apache Kafka

Apache Kafka – распределённая система для обработки данных в режиме реального времени.
Работает как почта — одни сервисы передают туда сообщения, а другие — получают.
Называют брокером сообщений, так как выступает в качестве посредника


Компоненты

🟣Продюсеры — приложения, которые публикуют данные
🟣Консьюмеры — приложения, которые читают

⚪️Топики – каналы, куда продюсеры публикуют сообщения. Могут иметь множество подписчиков (консьюмеров)
⚪️Партиции – части топиков для параллельной обработки данных.
Сообщения в партиции хранятся в строгом порядке

🟣Брокеры — серверы, которые принимают, хранят и передают сообщения.
В кластере их может быть несколько для отказоустойчивости и масштабируемости
🟣Зукипер — сервис для координации. Управляет конфигурацией кластера, отслеживает состояние брокеров, топиков и партиций

Принцип работы


*️⃣Публикация: продюсер отправляет данные в топик, выбирает партицию для записи (с помощью ключа сообщения, по алгоритму round-robin)

*️⃣Хранение: сообщение записывается в выбранную партицию на одном из брокеров.
Происходит репликация (об этом далее)

*️⃣Чтение: консьюмер запрашивает данные из топика, Kafka направляет консьюмера к соответствующей партиции.
Читает, начиная с последнего прочитанного сообщения (офсета).

*️⃣Обновление офсетов: консьюмер периодически обновляет свой текущий офсет (в Zookeeper / в самом Kafka, зависит от настройки)
Это позволяет возобновить чтение с правильного места в случае сбоя.


Репликация данных

Реплика в Kafka – копия партиции топика, хранится на другом брокере для обеспечения надежности и отказоустойчивости.

Лидер — основная копия партиции, которая обрабатывает все операции записи и чтения.
Фолловеры — дополнительные копии, которые синхронизируются с лидером.

Как работает?


Сообщения записываются в лидера и затем копируются на фолловеров
Фолловеры следят за лидером и обновляются в реальном времени
Если лидер выходит из строя, один из фолловеров становится новым лидером для непрерывности работы

Replication factor — количество реплик для каждой партиции. Например, фактор репликации 3 означает 1 основную копию и 2 резервные.


Типы доставки сообщений

🟠At most once: сообщение может быть доставлено максимум один раз, возможны потери
🟠At least once — как минимум один раз, возможны дублирования
🟠Exactly once — ровно один раз, без потерь и дублирования

Надежность доставки


Продюсеры могут настроить количество подтверждений (acks) от брокеров
😀acks=0: Без подтверждений, низкая надежность.
😀acks=1: Подтверждение от лидера, средняя надежность.
😀acks=all: Подтверждение от всех реплик, высокая надежность.


Способы Интеграции с
Kafka

*️⃣Прямое подключение: через стандартные клиенты (Java, Python, Go и др.)
*️⃣Коннекторы Kafka Connect: для интеграции с БД, хранилищами и др.
*️⃣Потоковые платформы: Apache Flink, Apache Spark и др


Примеры

Синхронная работа


Синхронная передача: приложения отправляют данные и ожидают подтверждения от Kafka
☺️ параметр acks=all у продюсера, чтобы дождаться подтверждения от всех реплик перед продолжением

Запрос-ответ: консьюмер отправляет запрос и ожидает ответа в другом топике.
☺️ уникальные ключи для корреляции запросов и ответов

Асинхронная

Логирование и мониторинг: отправка логов без ожидания подтверждения
☺️ параметр acks=1 или acks=0 для продюсеров, чтобы минимизировать задержку

Обработка событий
☺️ группа консьюмеров параллельно обрабатывает события

ETL-процессы: загрузка в хранилища через Kafka
☺️ Kafka Connect для интеграции с источниками и приемниками


Kafka как хранилище данных

😀Можно настраивать время хранения сообщений от минут до нескольких лет
😀Сообщения хранятся в сегментах и индексируются эффективное управление большими объемами данных
😀Высокая скорость записи и чтения данных

Ограничения
😀Нет сложных запросов и транзакционной поддержки
😀Старые данные автоматически удаляются по истечению срока
😀Иногда нужна интеграция с др системами (HDFS, S3, реляционные БД)

Нужны бесплатные материалы по Kafka?
Да 👍/ Нет 👾


#Kafka #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍513💯1🆒1
Основы Kafka (продолжение)

Apache Kafka – популярный брокер сообщений с открытым исходным кодом. Применяется в высоконагруженных системах для асинхронной интеграции, где требуется гарантированная доставка сообщений.

Подход к обмену сообщениями
Те, кто отправляют сообщения в Kafka, называются продюсерами, а те, кто читает, косьюмерами. В Kafka используется подход pull, когда консьюмеры сами отправляют запросы в брокер раз в n миллисекунд для получения новой порции сообщений. Такой подход позволяет группировать сообщения в пакеты, достигая лучшей пропускной способности. К минусам модели можно отнести потенциальную разбалансированность нагрузки между разными консьюмерами и более высокую задержку обработки данных.

После прочтения косньюмерами сообщения в Kafka не удаляются и могут храниться неограниченное время. Благодаря этому одно и то же сообщение может быть обработано сколько угодно раз разными консьюмерами и в разных контекстах.

Архитектура Kafka
Kafka является распределенной системой. Все серверы объединяются в кластеры. Хранение и пересылка сообщений идёт параллельно на разных серверах, это даёт большую надежность и отказоустойчивость. Такая архитектура упрощает горизонтальное масштабирование: достаточно добавить дополнительные серверы.

Хранение сообщений в Kafka
Каждое сообщение (event или message) в Kafka состоит из ключа, значения, таймстампа и опционального набора метаданных (headers). Сообщения хранятся в топиках, которые делятся на партиции (partitions). Партиции распределены между брокерами в кластере и могут быть реплицированы для надёжности. Сообщения с одинаковыми ключами попадают в одну партицию, что обеспечивает порядок записи и чтения.

Чтение сообщений в Kafka
Как не читать одно сообщение дважды? Консьюмеры в Kafka отмечают обработанные сообщения с помощью оффсетов. Оффсет – это номер сообщения в партиции. Консьюмер отправляет брокеру запрос offset-commit с офсетом, который нужно сохранить. Брокер хранит эти офсеты в специальном топике. Консьюмеры могут получить последний закоммиченный оффсет у брокера и продолжить чтение сообщений с него.

Процесс обмена сообщениями в Kafka
1. Создается именованный топик, который является точкой интеграции между продюсером и консьюмером. Топик делится на несколько партиций, которые распределяются между брокерами в кластере
2. Продюсер отправляет сообщение в топик брокера. Сообщение содержит ключ, значение, таймстамп и опциональные хедеры. Ключ определяет, в какую партицию попадет сообщение.
3. Консьюмер пытается забрать сообщение и его уникальный идентификатор (оффсет), присвоенный брокером (как правило, порядковый номер).
4. Брокер хранит сообщение до запланированной очистки журнала. Kafka не отслеживает, какие сообщения были обработаны консьюмерами.
5. Консьюмер обрабатывает сообщение, исходя из своей бизнес-логики и отправляет запрос обратно на сервер, используя его уникальный офсет и сообщает брокеру либо об успешной обработке (offset-commit), либо об ошибке (offset-reset).
6. В случае успеха офсет помечается как закоммиченный и сохраняется в специальном топике. В случае ошибки оффсет сбрасывается на предыдущее значение или на дефолтное. Сообщение не удаляется из партиции и доступно для повторного чтения консьюмерами.


Где используется Kafka
Kafka используется для обработки больших объёмов данных, сотен тысяч сообщений в секунду, которые читаются тысячами подписчиков. Kafka — это легко масштабируемая система, обладающая повышенной отказоустойчивостью, что очень важно в крупных проектах, например, банкинг, телеком социальные сети, IoT.


#Kafka@ITKB_channel #DevOps
👍164🏆3
Настройка Apache Kafka для высоконагруженных систем

Apache Kafka является одной из самых популярных платформ для обработки потоков данных, обеспечивая высокую пропускную способность и низкие задержки при передаче сообщений. В высоконагруженных системах, где необходимо обрабатывать миллионы сообщений в секунду, важность правильной настройки Kafka трудно переоценить. Без оптимизации её параметров можно столкнуться с серьёзными проблемами, такими как рост задержек, потеря сообщений и переполнение очередей. Эффективная настройка Kafka критична для обеспечения бесперебойной работы в условиях высокой нагрузки и стабильной обработки данных в реальном времени.

Цель этой статьи — рассмотреть основные аспекты настройки Apache Kafka, которые влияют на производительность системы. Мы сосредоточимся на оптимизации параметров брокеров и продюсеров для достижения максимальной пропускной способности, минимальных задержек и надежности. Также рассмотрим важность мониторинга и тестирования системы для своевременного выявления и устранения узких мест.


➡️Подробнее

#Kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4
💙 Kafka UI — open-source веб-интерфейс для управления и мониторинга кластеров Apache Kafka.

Обеспечивает удобный доступ к топикам, брокерам, сообщениям и схемам, упрощая администрирование и отладку.

Ключевые особенности:
— Просмотр и управление топиками, партициями и сообщениями через браузер.
— Поддержка нескольких Kafka-кластеров с переключением в интерфейсе.
— Визуализация схем (Protobuf, JSON) через Schema Registry.
— Мониторинг брокеров, потребителей и лагов в реальном времени.
— Легкая установка через Docker или Kubernetes.


🖥 Git
📱 Git-2 (спасибо комментарию подписчика)

#Apache #Kafka #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1232