Size: a a a

2019 December 09

AK

Alexander Kuznetsov in pro.kafka
Всем привет!
Недавно начал осваивать Kafka и возник такой вопрос: существует ли какая то встроенная поддержка сценария, когда интересует не непрерывная обработка каких либо событий/данных, а когда нужно передать ограниченный набор данных, обработать его,  сохранить в БД и лишь после того,  как consumers отработат всю переданную пачку - сделать какое-либо действие?
К примеру,  каждый день в определенный момент времени приходит data set размером n записей.
Успешно кладем это в очередь,  успешно обрабатываем consumer(ами)...И дальше непонятно - как consumer может узнать что n(ое) сообщение последнее и выполнить какой-либо action, т.к только producer знает  сколько их было всего.
Пока в голову приходит  следующая реализация: обеспечить чтение в той же последовательности как запись и последним в очередь добавлять специальный объект-маркер,  обрабатывая который сервис поймет что это последний объект в цепочке.
источник

VG

Vik Gamov in pro.kafka
Vadim
народ для тестовых стендов лучше делать 1 кафку на множество стендов в кубере, или на каждый проект свою кафку лучше?
На каждый проект свою Кафку
источник

VG

Vik Gamov in pro.kafka
George Gaál
Чтоб потом не мучаться с удалением левых топиков и пр
This
источник

VG

Vik Gamov in pro.kafka
Alexey
Если в KTable нет записи, я хочу быть уверен что и в исходном топике сообщения нет. Без всяких eventual consistency.
Тебе надо определиться что для тебя source of Truth и оттуда читать. Если в ktable нет - значит считать что ее нет
источник

V

Vadim in pro.kafka
Vik Gamov
На каждый проект свою Кафку
А для прода?
источник

VG

Vik Gamov in pro.kafka
Alexey
Спасибо. Понял что транзакционности нет. Хранить последние сообщения в KTable муторно, чистить надо, ttl нет. Наверное сделаю кеш руками - второй консьюмер который складывает сообщения быстро в память. А медленный консьюмер пусть себе медленно пишет в хранилище.
Можно сделать свой state store (хазелкастом какими-нибудь) и чтобы он удалял записи поttl
источник

VG

Vik Gamov in pro.kafka
Vadim
А для прода?
It depends
источник

V

Vadim in pro.kafka
Топики разные у стендов сообщения не нужно читать
источник

V

Vadim in pro.kafka
Только в рамкпх сервисов своего нецмспецса
источник

V

Vadim in pro.kafka
Нагрузка небольшая
источник

VG

Vik Gamov in pro.kafka
Multi Tenancy делать самом - это тот ещё квест
источник

SR

Sergey Rublev in pro.kafka
Alexander Kuznetsov
Всем привет!
Недавно начал осваивать Kafka и возник такой вопрос: существует ли какая то встроенная поддержка сценария, когда интересует не непрерывная обработка каких либо событий/данных, а когда нужно передать ограниченный набор данных, обработать его,  сохранить в БД и лишь после того,  как consumers отработат всю переданную пачку - сделать какое-либо действие?
К примеру,  каждый день в определенный момент времени приходит data set размером n записей.
Успешно кладем это в очередь,  успешно обрабатываем consumer(ами)...И дальше непонятно - как consumer может узнать что n(ое) сообщение последнее и выполнить какой-либо action, т.к только producer знает  сколько их было всего.
Пока в голову приходит  следующая реализация: обеспечить чтение в той же последовательности как запись и последним в очередь добавлять специальный объект-маркер,  обрабатывая который сервис поймет что это последний объект в цепочке.
Смотри в сторону ручного коммита сообщений, как раз твой сценарий
источник

AK

Alexander Kuznetsov in pro.kafka
Sergey Rublev
Смотри в сторону ручного коммита сообщений, как раз твой сценарий
Спасибо за ответ!  Но не очень понял: как ручной комит может помочь в определении того,  какой получаемый из очереди объект является последним...
источник

VG

Vik Gamov in pro.kafka
Alexander Kuznetsov
Спасибо за ответ!  Но не очень понял: как ручной комит может помочь в определении того,  какой получаемый из очереди объект является последним...
Никак. Ты сам должен контролировать кол-во сообщений в батче и комитить соответственно
источник

SP

Sergey Pichkurov in pro.kafka
Alexander Kuznetsov
Спасибо за ответ!  Но не очень понял: как ручной комит может помочь в определении того,  какой получаемый из очереди объект является последним...
это возможно, но это надо обеспечивать на стороне продьюсера (например флаг в заголовке).  и в этом случае, таки да, ручной комит будет не лишним .
источник

A

Alex in pro.kafka
Ну и тогда свой партишинер ещё
источник

A

Alex in pro.kafka
Иначе как гарантировать что ваш флаг прочитал нужный консьюмер
источник

SP

Sergey Pichkurov in pro.kafka
ну да, есть ньюансы, но это уже детали рализации )
источник

SP

Sergey Pichkurov in pro.kafka
и я согласен, без этого всего можно жить
источник

SP

Sergey Pichkurov in pro.kafka
еще на разу не встречал кейса когда нельзя
источник