UI-клієнти для Apache Kafka

Усім привіт. Я Сергій Моренець, розробник, викладач, спікер та технічний письменник. Хочу поділитися своїм досвідом роботи з такою цікавою темою як візуалізація та керування даними в Apache Kafka. Ми розглядаємо Kafka у деяких наших тренінгах. У цій статті я хотів би торкнутися теми UI клієнтів для цієї технології. Apache Kafka — це не тiльки система для обміну повідомленнями, а й сховище для них (як, наприклад, база даних). Нам (і розробникам, і DevOps) потрібно якимось чином контролювати дані, які там знаходяться, а також моніторити внутрішній стан кластера. Зазвичай розробники СУБД надають повноцінне GUI для своїх баз даних, наприклад MySQL Workbench, pgAdmin або MongoDB Compass. У самій Apache Kafka як open-source проекті для цього є лише засоби командного рядка. Тому давайте розглянемо додаткові засоби для візуалізації, які пропонує індустрія:

  1. Confluent Control Center
  2. Kowl
  3. Akhq
  4. Kafdrop
  5. Kafka Topics UI

Одна з важливих вимог до таких систем — можливість інтеграції з різними сервісами Kafka:

  • Schema Registry
  • Kafka Connect
  • ksqlDB
  • Kafka Streams

Ще одна критично важлива функціональність — підтримка та розпізнавання (бажано, автоматичне) найбільш популярних форматів повідомлень для Kafka:

  • JSON
  • Avro
  • MsgPack
  • Protobuf
  • XML

Confluent Control Center

І найпотужніша система з усіх розглянутих — Control Center, який розробляється компанією Confluent і в свою чергу є частиною Confluent Platform. Його головний плюс — він розробляється тією самою організацією, як і сама Kafka, а мінус — те, що поширюється під комерційною ліцензією.

Confluent Control Center — вебдодаток, який може працювати всередині контейнера Docker. Він дозволяє інтегруватися з усіма вищезгаданими Kafka сервісами і може працювати у двох режимах. У нормальному режимі ви можете моніторити, зберігати та аналізувати метрики роботи Kafka. Для цього необхідно на всіх клієнтських програмах (споживачі та відправники даних) встановити так звані metrics interceptors. Вони будуть моніторити роботу клієнтів та надсилати метрики до Control Center. У спрощеному (Reduced Infrastructure) режимі ця функціональність відключена для зниження навантаження на сервери та зменшення обсягу використовуваного простору.

На головній сторінці є доступ до всіх сервісів екосистеми Kafka:

Включаючи і роботу з topics — перегляд, створення та видалення:

По суті, Control Center — дуже потужна система керування Kafka кластером, що вимагає складної конфігурації і вимоглива до ресурсів. Якщо вам потрібен більш простий «переглядач» даних, то community пропонує інші варіанти.

Kowl

Kowl (раніше називався Kafka Owl) — безкоштовний вебдодаток, що розробляється з 2019 року на Go (серверна частина) та React (фронт-енд), який є частиною складнішої платформи Redpanda. Спочатку його автором була компанія CloudHut, яка у 2022 році була поглинена Redpanda. Kowl дозволяє інтегруватися з Schema Registry та Kafka Connect та переглядати найважливішу інформацію про Kafka кластер:

  • Topics
  • Messages
  • Consumer Groups

На жаль, це лише браузер даних, і ви не можете створювати нові topics або відправляти повідомлення до них. Але, з іншого боку, ви можете використовувати додаткові фільтри та спеціальний формат запитів для пошуку повідомлень.

Великим плюсом цієї технології є розпізнавання найпопулярніших бінарних форматів, що використовуються в повідомленнях, включаючи Avro, MsgPack та Protobuf. Якщо ж вам додатково потрібна автентифікація та авторизація (наприклад, через OAuth), це доступно тільки в платній версії Kowl Business.

Akhq

Akhq (раніше він називався KafkaHQ) — ще один безкоштовний вебклієнт, схожий на Kowl, але вже написаний на Micronaut (серверна частина) та React (фронт-енд). Досить молодий проєкт (розробка стартувала у 2018), який є частиною великої платформи з побудови складних workflow Kestra. Якщо підключити Schema Registry, то Akhq може десеріалізувати повідомлення у форматах Avro і Protobuf. На жаль, ksqlDB не підтримується.

Ось як виглядає його головна сторінка:

Але на відміну від Kowl, тут ви можете створювати нові topics:

І надсилати туди повідомлення:

Плюсом є те, що Akhq підтримує автентифікацію (JWT, LDAP, AWS MSK) та базові можливості моніторингу (метрики, логування, стан життєдіяльності програми):

Але це ще не все. Розробники Akhq створили публічний API (нехай і експериментальний), і тепер можна отримати всю інформацію про кластер Kakfa через цей REST API:

Akhq став єдиним із цих 5 аналізованих проектів, де довелося повозитися з конфігурацією, причому не його, а Kafka. У ній є дві важливі властивості — listeners та «advertised listeners». Друга властивість дуже важлива для клієнтів, оскільки вони використовуватимуть її для підключення. Так ось, якщо вказати значення властивості як «PLAINTEXT://broker:29092, PLAINTEXT_HOST://localhost:9092», то Akhq використовує останнє значення зі списку як адресу брокера. Звичайно, це не буде працювати, якщо Akhq і Kafka знаходяться на різних серверах (наприклад, ми їх стартуємо через Docker Compose). Тому довелося змінити для Akhq значення просто на PLAINTEXT://broker:29092.

Kafdrop

Kafdrop — безкоштовний UI-клієнт від компанії Obsidian Dynamics. Цікаво, що ця компанія не тільки пише комерційні проєкти для своїх клієнтів, але й активно вкладається в open-sourcing. Kafdrop розробляється з 2019 року і написаний на Spring Boot (серверна частина) та Freemarker, jQuery та Boostrap (фронт-енд).

Цей проект пропонує найбільші можливості роботи з Kafka без інтеграції з ksqlDB і Kafka Connect/Streams. Але ви можете переглянути поточну інформацію по Kafka кластеру:

І легко створити topic:

Kafdrop також підтримує інтеграцію з Schema Registry і дозволяє розпізнавати повідомлення у форматі Protobuf.

Kafka Topics UI

Kafka Topics UI — найстарiший з вебклієнтів для Kafka, розроблений лондонським стартапом Lenses. Ця компанія відома своєю streaming platform на основі Kafka, а також безліччю безкоштовних UI клієнтів для Kafka сервісів. Kafka Topics UI написав на AngularJS і розроблявся з 2016 по 2019 рік. На жаль, зараз розробка зупинена, можливо, через те, що AngularJS втратив свою популярність після появи Angular 2.x.

Особливість цієї технології в тому, що тут немає серверної частини, а його клієнтська частина не містить Kafka клієнта, як усі попередні проєкти. Натомість Kafka Topics UI використовує ще один цікавий проєкт — Kafka REST Proxy вiд Confluent. Цей сервіс дозволяє вимагати або створювати дані в Kafka кластері через простий і зрозумілий REST API. Іноді це єдиний варіант підключення до Kafka, якщо, наприклад, для вашої мови програмування або платформи немає Kafka клієнта.

Тому якщо ви хочете використовувати цей додаток, вам доведеться встановити та запустити Kafka REST Proxy. Сам Kafka Topics UI дуже простий у використанні і пропонує лише перегляд topics/повідомлень:

Kafka Topics UI може розпізнавати формати JSON/Avro, кодування Base64, але не підтримує Protobuf.

З мінусів цього проекту — так як він перестав підтримуватися, то його не можна використовувати з останніми версіями Kafka REST Proxy, тому що там поміняли API.

Висновки

Яку з цих технологій варто вибрати? Звичайно, у цій статті описані не всі UI tools, та про них усіх і неможливо було розповісти одночасно. Наприклад, є така популярна утиліта Offset Explorer. Але для неї немає офіційного Docker-образу, а в цьому огляді вибрано ті проєкти, для яких є свій Docker-образ, що спрощує їх використання та тестування. Поєднує їх те, що вони не є самостійними проєктами, а сплановані як вебклієнти для платформ обробки даних на основі Kafka (крім Kafdrop). Всі вони тією чи іншою мірою дозволяють переглядати дані в Kafka кластері.

Найбільш простим і невибагливим до ресурсів є Kafka Topics UI, але він з 2020 року не підтримується і вимагає Kafka REST Proxy, причому певних версій. Confluent Control Center найбільш функціональний, але поширюється тільки для комерційного використання. Його головний плюс — інтеграція з іншими Kafka сервісами та можливість використання у Confluent Platform/Confluent Cloud.

Kowl не дозволяє модифікувати дані в Kafka кластері, так що він підходить тільки якщо вам потрібен read-only доступ. Ну і у виборі між Akhq і Kafdrop я вибрав Akhq, виходячи з тієї функціональності, що він пропонує.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось10
До обраногоВ обраному8
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Kafdrop подобається

Наприклад, є така популярна утиліта Offset Explorer. Але для неї немає офіційного Docker-образу, а в цьому огляді вибрано ті проєкти, для яких є свій Docker-образ, що спрощує їх використання та тестування

Яким чином в даному випадку Docker спрощує використання таких тулів? Хіба не простіше той самий Offset Explorer 1 раз встановити на робочу машину і прописати там конекти до всіх потрібних кластерів?

Залежить від того, що вам потрібно.
Якщо просто один раз запустити, подивитися, що потрібно і забути — то можна використовувати і Offset Explorer.
А якщо вам потрібно, наприклад, автоматизувати розгортання environment (локального/тестового) та ще для десятка серверів, то Docker дозволяє один раз написати Dockerfile або docker-compose.yml і багаторазово його використовувати.

ну, зараз десь так і є — test environment з кафкою, DB і рештою сервісів може бути розгорнутий на
одній з dev1-3 окремих VM-ок, Offset Explorer інстальований на робочій машині, в ньому прописані всі 3 кластери, щоб підключатись до потрібного
використання одного з описаних вище тулзів може спростити роботу в цьому випадку?

Ну і як для мене, головна перевага Docker — крос-платформеність.
Незалежно від того, яка у вас ОС, ви завжди можете на ній запустити Docker контейнер з потрібним сервісом.
А ось потрібно вам запустити не Offset Explorer, а, наприклад, Redis, та ще й під Windows. А таких дистрибутивів давно вже нема.
І вам доводиться або запускати його як Docker контейнер, або скручуватися — запускатися WSL, там Ubuntu, і в ній уже Redis.

Зазвичай розробники СУБД надають повноцінне GUI для своїх баз даних, наприклад MySQL Workbench

У далекому 2008 році, коли я тільки знайомився з MySQL Workbench, я думав що це просто сирий продукт і розробники за пару років обкатають його як належить, і буде щось серйозне. Як не як, а на той момент то був opensource продукт. Пройшло 14 років, MySQL став власністю Oracle, а MySQL Workbench як був гавняним редактором, так і залишився ним: падає, зависає, інколи не діють гарячі клавіші, типу Ctrl+X, інколи бачу графічні глюки, які видно поверх усіх зображень на моніторі і т.д. Ну хоч безкоштовний, за це, звичайно ж, дякую, але є купа безкоштовних ІТ-продуктів, які працюють як належить...

Колись дуже давно користувався EMS SQL Manager для MySQL. Він непоганий продукт, але не open-source, тому за нього довелося платити.

О, дякую! Здається те, що треба.

Дякую, але я бачу, що там Community Edition безкоштовний, а за Enterprise треба платити ?

Community Edition вистарчає з головою

Не бачу як можна зробити dump декількох баз даних в один файл. By default воно пропонує патерн імені dump-${database}-${timestamp}.sql, але якщо я змінюю його, наприклад, на meta.sql, то дамп фейлиться, каже, що такий файл вже існує. Невже не можна зробити таки один файл дампу для усіх баз даних із можливістю переписувати вже існуючий файл (все одно він у мене контролюється гітом)?

А MySQL-Workbench хіба вміє кілька баз в один файл? І взагалі нафіга кілька баз в один файл?
Заюзайте вже mysqldump консольний тоді може — обов’язково треба юайку щоб дампати?

А MySQL-Workbench хіба вміє кілька баз в один файл?

Вміє. Якщо DBeaver не вміє таке, то це звичайно ж не критично, значить буде декілька файлів замість одного.

І взагалі нафіга кілька баз в один файл?

Ну не знаю, мені так зручніше.

обов’язково треба юайку щоб дампати?

Ну для профі може й не треба UI, а мені, як звичайному користувачу, непогано б мати усі адміністративні функції в одному редакторі.

Сорі, чого немає того немає.
DBeaver має свій функціонал, і не такий бажний як MySQLWorkbench, але значить є фічі які має тільки Workbench

Користувався github.com/provectus/kafka-ui Поки це найкращий UI, як на мене: можна переглянути вміст тропіка, шукатии повідомлення, опублікувати повідомлення, JSON детектить самостійно і показує у зручному переглядачі, можна вказати декілька кластерів одночасно.

Мав досвід з github.com/yahoo/CMAK, дуже не вистачало роботи з самими повідомленнями, типу переглянути вміст чи опублікувати нове повідомлення. В іншому базові речі вміє робити.

kafka-ui — цікавий продукт, тим більше, що він зроблений українською компанією Provectus. А він підтримує інтеграцію з ksqlDB та іншими сервісами?

Не працював з ksqldb, але на по скріншотах вигляадє, що має підтримку github.com/...​tion/images/Interface.gif

Дякую, що поділилися своїм досвідом. Що ви використовуєте із цього списку?

З якого списку? Це все про одну тулу, яку я сам написав і сам використовую. Просто я її апдейтив періодично новим функціоналом, тому декілька дописів.

Дуже вражаючий список. Що ви використовуєте із цього списку?

Підписатись на коментарі