Різниця між Редісом і Кафкою [закрито]


86

Redis можна використовувати як паб у режимі реального часу так само, як Кафку.

Мене бентежить, який із них використовувати.

Будь-який варіант використання буде чудовою підмогою.


14
Я не впевнений, чому це питання було закрито як "засноване на думках"? Існують об'єктивні технічні відмінності між ними та наявна відповідь чітко окреслює ці відмінності.
Девід Андерсон,

Відповіді:


135

Redis pub-sub в основному нагадує систему пожежі і забуття, де всі створені вами повідомлення будуть доставлені відразу всім споживачам, а дані ніде не зберігаються. У вас є обмеження в пам’яті щодо Редіса. Крім того, кількість виробників та споживачів може вплинути на ефективність роботи Redis.

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

Остаточний результат:

Використовуйте Redis:

  1. Якщо ви хочете пожежі і забути якусь систему, де всі повідомлення, які ви виробляєте, негайно доставляються споживачам.
  2. Якщо швидкість найбільше турбує.
  3. Якщо ви можете пережити втрату даних.
  4. Якщо ви не хочете, щоб ваша система зберігала відправлене повідомлення.
  5. Кількість даних, з якими потрібно мати справу, не є величезною.

Використовуйте kafka:

  1. Якщо ви хочете надійності.
  2. Якщо ви хочете, щоб у вашій системі була копія повідомлень, яка була надіслана навіть після споживання.
  3. Якщо ви не можете пережити втрату даних.
  4. Якщо швидкість не викликає великих проблем.
  5. обсяг даних величезний

68
Основна відмінність полягає в тому, що Redis Pub / Sub працює на основі push, а Kafka Pub / Sub - на основі push. Це означає, що повідомлення, опубліковані в Redis, будуть автоматично доставлені передплатникам миттєво, тоді як у Kafka Дані / повідомлення ніколи не виштовхуються до споживачів, споживач буде запитувати повідомлення, коли споживач буде готовий обробляти повідомлення. cloudkarafka.com/blog/… kafka.apache.org/documentation.html#design_pull
Зені

Читаючи це: redis.io/topics/persistence, мені здається можливим зберігати відправлені повідомлення. Я помиляюся?
Девід Д.

1
@DavidD: Посилання, яке ви надали, пояснює, як ви можете налаштувати, redisщоб повідомлення, надіслані, але ще не оброблені , не були втрачені після перезапуску redis. Хоча це можливо зробити, redisне дозволяє тримати (або продовжувати повторно використовувати слова @Karthikeyan) поза рамкою.
Юнес

10

Версія Redis 5.0+ надає структуру даних Stream . Це може розглядатися як структура даних журналу з гарантіями доставки. Він пропонує набір блокувальних операцій, що дозволяють споживачам чекати нових даних, доданих до потоку виробниками, і на додаток до цього концепцію, яка називається Групи споживачів.

В основному структура Stream забезпечує ті самі можливості, що і Kafka.

Ось документація https://redis.io/topics/streams-intro

Цю функцію підтримують два найпопулярніші клієнти Java: Redisson та Jedis


1
Сам Микита :) Елегантна бібліотека! Щойно почав його використовувати. Добре структурована та продумана! Ви геніальний сер!
ммм

@mmm Дякую!
Микита Кокшаров

У мене виникають запитання щодо правильного використання, і ні, і я боюся робити неправильні припущення? Можливо, ви могли б переглянути два запитання, які я додав тут у SO. Також хотів би додати вас у Skype, щоб іноді турбувати, якщо це нормально. Я можу дати деяке уявлення про те, як я хочу цим скористатися. Не загальний нуб :)
ммм

Наприклад, зараз я створюю кешовану карту ... використовуючи ідентифікатор середовища виконання як ключ, а потім додаю список матеріалів, які система в даний час обробляє з деке ... списку, я можу створити ArrayList, я думаю , я вважаю, що redisson перетворить його для мене внутрішньо, але якщо цього не зробить і не створить список redisslon, то я повинен дати йому ім'я, правильно? Яке ім’я ви б дали тоді цьому списку? Випадковий ідентифікатор? Чи повинен ваш API тоді також не надавати параметр менше createList, createMap та ін, оскільки для цього існує варіант використання?
ммм

Звичайно, я можу надіслати randomUuid, але було б приємно знати, що redisson має хороший генератор імен. Я також пишу свій власний Deque для обробки пакетних завдань, що містять reisson deque, підкріплений картою, що містить "взяті" елементи. Якби у нас було 10 систем з кожними 8 потоками, які обробляють чергу, і сталася ядерна бомба, всі вони були б втрачені і залишені необробленими, оскільки вони були взяті, але не повністю оброблені.
ммм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.