Ну или взять пачку, после обработки часть вернуть обратно. И это вполне надёжно
Ну взяли вы пачку в 10 сообщений. На обработку одного уходит 5мс. Закомитили офсет через 1мс. Через 3 упали. Сообщения потеряли. Дальше я любой ваш кейс сведу к этому сценарию до тех пор, пока вы не начнете читать сообщения строго последовательно из партиции и делать коммит офсета по одному сообщению.
Ну взяли вы пачку в 10 сообщений. На обработку одного уходит 5мс. Закомитили офсет через 1мс. Через 3 упали. Сообщения потеряли. Дальше я любой ваш кейс сведу к этому сценарию до тех пор, пока вы не начнете читать сообщения строго последовательно из партиции и делать коммит офсета по одному сообщению.
А зачем закоммитили оффсет через 1мс, а не по факту выполнения пачки?
Хмм, как Кафка теряет данные? Я знаю один кейс, но очень редкий. При правильной настройке.
Кафка с настройками по умолчанию не теряет данные сама. Раньше были настройки что могла и потерять, сейчас по умолчанию все ok. Если конечно, fsync хотя бы на одной реплики пройдет.
Кафка с настройками по умолчанию не теряет данные сама. Раньше были настройки что могла и потерять, сейчас по умолчанию все ok. Если конечно, fsync хотя бы на одной реплики пройдет.
Но написать на ней приложение, которое теряет данные, слишком просто. Точнее, муторно решать обратную задачу. Если, конечно, мы хотим иметь в одновремнной обработке больше сообщений, чем партиций
Вот и я про тоже. Не надо использовать кафку в каждом приложении))
В каждом - нет. Но если нужна надежность, то как-то и нет вариантов. Даже просто БД менее надежны почти во всех кейсах. У Кафки есть ровно одна проблема - обеспечение транзакционного взаимодействия при записи в БД и в кафку. Но и там есть решения.