Главное, на что мне нужно обратить внимание, это то, что вы не должны рассматривать данные в Kafka так же, как данные в базе данных. Kafka не был разработан для такой работы (например, когда я нажимаю кнопку X, записи Y будут удалены).
Вместо этого вы должны видеть тему как поток бесконечных данных. Каждая запись, созданная по теме Kafka, будет потреблена и обработана независимо потребителем.
Восприятие темы в виде потока дает другое решение:
Вы можете использовать вторую тему с отфильтрованными результатами!
Streaming Diagram
___ Topic A ____
-- Produced Messages --> | | _______________________
|________________| --> | |
| Filtering Application |
___ Topic B ___ | |
| | <-- |_______________________|
<-- Consumed Messages -- |________________|
Объяснение довольно простое, вы создали сообщения для темы А. Затем вы используете Filtering Application
, который будет:
- Используйте ваши сообщения из темы A
- На основе некоторой бизнес-логики (например,
age < 50
) будет выполняться фильтрация
- Создание отфильтрованных сообщений в теме B
Наконец, ваши потребители получат сообщения из темы B.
Теперь, когда дело доходит до создания приложения фильтрации, у вас есть несколько вариантов:
- Реализация базового решения с использованием потребителя и производителя
- Использование Потоки Кафки
- Использование KSQL