KRaft - Apache Kafka Without ZooKeeper

Apache Kafka, популярна система обробки потокових даних, зробила значний крок у своєму розвитку, вирішивши перейти від використання Apache Zookeeper до власної реалізації протоколу консенсусу, відомого як KRaft (Kafka Raft). Це рішення має значні наслідки для архітектури та управління Kafka.

Консенсус

Консенсус в розподілених системах — це фундаментальний принцип, який дозволяє декільком взаємопов'язаним вузлам (або процесам) у системі досягти загальної домовленості щодо певних даних або стану системи, незважаючи на наявність помилок або відмов деяких вузлів. Цей принцип є ключовим для забезпечення надійності та послідовності в розподілених системах, таких як блокчейни, бази даних, системи управління версіями тощо. Протоколи консенсусу, такі як Paxos, Raft, або Zab, дозволяють системі продовжувати роботу коректно, навіть коли деякі компоненти відмовляють або існують мережеві розриви, забезпечуючи, що всі підняті вузли мають консистентний вигляд даних.

Основні аспекти консенсусу в розподілених системах включають:

  1. Узгодженість (Agreement): Всі коректні вузли системи мають погодитися на одне й те саме значення або рішення.

  2. Стійкість до відмов (Fault Tolerance): Система повинна забезпечувати консенсус навіть у присутності відмов частини вузлів. Це означає, що система може витримувати певну кількість відмов (зазвичай меншу половину вузлів) без втрати здатності досягати консенсусу.

  3. Живучість (Liveness): Система повинна забезпечити, що кожен коректний запит на досягнення консенсусу буде врешті-решт завершений.

  4. Відсутність блокувань (Non-blocking): Процес досягнення консенсусу не повинен назавжди застрягти в стані, де рішення не може бути прийняте.

А що таке розподілена система?

Розподілена система — це група комп'ютерів, що працюють разом, як єдине ціле, для досягнення спільної мети. Ці комп'ютери (вузли) можуть бути фізично розташовані в одному центрі обробки даних або розкидані по всьому світу. Розподілені системи дозволяють обробляти більші обсяги даних, забезпечувати високу доступність послуг шляхом реплікації даних та обчислювальних ресурсів, а також підвищити витривалість системи за рахунок толерантності до відмов окремих компонентів.

Zookeeper

Apache Zookeeper — це централізована служба для зберігання конфігурацій, неймінгу, синхронізації та надання групових послуг. Вона використовується для координації між вузлами в розподіленій системі. У контексті Kafka, Zookeeper використовувався для управління метаданими кластера (такими як інформація про топіки, партиції, репліки та їх статуси) та вибору лідера серед реплік.

Перехід до KRaft

Рішення Kafka перейти на використання KRaft замість Zookeeper було мотивовано декількома факторами:

  1. Спрощення архітектури: Видалення залежності від Zookeeper дозволяє спростити розгортання та управління Kafka, усуваючи потребу у додатковому компоненті та можливих точок збою.

  2. Покращення продуктивності: Власний протокол консенсусу може бути тісно інтегрований з логікою Kafka, забезпечуючи кращу продуктивність та масштабованість.

  3. Контроль та оптимізація: Розробка протоколу KRaft надає команді Kafka більше можливостей для контролю та оптимізації протоколу консенсусу. Вони можуть адаптувати протокол до специфічних потреб та сценаріїв використання Kafka, що може сприяти покращенню загальної ефективності та надійності системи.

Що таке Raft?

Raft — це протокол консенсусу, який був розроблений як більш проста альтернатива іншим протоколам, наприклад Paxos. Його основне завдання полягає в забезпеченні узгодженого стану між вузлами у розподіленій системі, що дозволяє системі залишатися стійкою до збоїв окремих вузлів. Основою Raft є механізм 'вибору лідера', який гарантує, що в кожний момент часу існує один вузол-лідер, відповідальний за управління процесом реплікації даних між вузлами, з метою досягнення консистентності інформації в усьому кластері.

Концепція 'вибору лідера' полягає в автоматичному виборі одного вузла кластера, який тимчасово виконує роль координатора між усіма вузлами. Цей лідер відповідає за прийняття оновлень і координування процесу їх реплікації до інших вузлів, забезпечуючи, щоб усі вузли мали однаковий, актуальний стан даних.

Відмінності між Zookeeper і Raft

  • Концепція та архітектура: Zookeeper був розроблений як загальний інструмент для координації розподілених систем, тоді як Raft спеціально призначений для забезпечення консенсусу в таких системах.

  • Спрощення vs універсальність: Raft надає більш простий підхід до досягнення консенсусу, зосереджуючись на легкості розуміння та реалізації. Zookeeper, навпаки, пропонує більш універсальні можливості координації, що може призвести до більшої складності в конфігурації та управлінні.

  • Інтеграція з Kafka: Перехід до KRaft дозволяє Kafka тісніше інтегрувати логіку консенсусу з внутрішніми процесами системи, забезпечуючи кращу продуктивність та масштабованість.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

4.6KПрочитань
1Автори
71Читачі
На Друкарні з 19 квітня

Більше від автора

  • Secure networking. Deep Dive

    Глибоке занурення в протоколи TLS/SSL та інфраструктуру відкритих ключів (PKI). Основні поняття, процес встановлення захищеного з'єднання, роль сертифікатів та ланцюжка довіри

    Теми цього довгочиту:

    Security
  • Поширені помилки у дизайні REST API

    У довгочиті розглядаються поширені помилки при проектуванні REST API та способи їх уникнення: версіонування, використання DTO, підхід CQRS, робота з мікросервісами, та інші практики для підвищення продуктивності, безпеки й зручності API

    Теми цього довгочиту:

    Java
  • Java. Короткий огляд еволюції багатопотоковості

    У перших версіях Java багатопоточність реалізовувалася за допомогою класу Thread, який дозволяв створювати нові потоки. Проте ця модель мала багато недоліків:

    Теми цього довгочиту:

    Java

Вам також сподобається

  • Продюсери і Консюмери в Kafka

    Стаття про продюсери і консюмери в Kafka. Producers, Consumers, Consumer groups, Rebalancing, Message delivery semantics, Offsets, Kafka partition picking, Avoiding duplicates, Message order maintaining, How many partitions should I choose for topic? Strategy for partitioning)

    Теми цього довгочиту:

    Kafka
  • 🧠 Цікаві факти про toLowerCase в Java!

    Коли ми працюємо з рядками в Java, часто виникає потреба перетворити великі літери на малі. Для цього зазвичай використовують вбудовану функцію Character.toLowerCase(). Але чи знаєте ви, як можна реалізувати це самостійно?

    Теми цього довгочиту:

    Java
  • Функціональний стиль на Java

    Коментар про використання функціонального стилю в програмуванні на Java для покращення читання коду і його підтримки.

    Теми цього довгочиту:

    Java

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається

  • Продюсери і Консюмери в Kafka

    Стаття про продюсери і консюмери в Kafka. Producers, Consumers, Consumer groups, Rebalancing, Message delivery semantics, Offsets, Kafka partition picking, Avoiding duplicates, Message order maintaining, How many partitions should I choose for topic? Strategy for partitioning)

    Теми цього довгочиту:

    Kafka
  • 🧠 Цікаві факти про toLowerCase в Java!

    Коли ми працюємо з рядками в Java, часто виникає потреба перетворити великі літери на малі. Для цього зазвичай використовують вбудовану функцію Character.toLowerCase(). Але чи знаєте ви, як можна реалізувати це самостійно?

    Теми цього довгочиту:

    Java
  • Функціональний стиль на Java

    Коментар про використання функціонального стилю в програмуванні на Java для покращення читання коду і його підтримки.

    Теми цього довгочиту:

    Java