Обновить

Dead Letter Queue в Kafka на практике

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели6.5K
Всего голосов 1: ↑1 и ↓0+3
Комментарии7

Комментарии 7

правильно ли я понимаю, что если после отправки автокоммита произойдет лаг сети или просто рестарт сервиса, то сообщение ни до внешнего апи, ни до dlq не дойдет?

На случай лага сети есть те же ретраи в том числе и при отправке в Кафку, если же сам под должен будет перезапуститься, то отработает gracefull shutdown, который не даст сообщениям потеряться и завершит таски, которые уже в рантайме (либо отправиться в DLQ, либо во внешний API)

p.s. gracfull shutdown на ответственности разработчика

я имею ввиду самый крайний случай, когда, например, время лага в сети будет больше времени, отведённого на gracefully shutdown

Тогда да, потеряем, но на то она и Кафка — сообщения можно перечитать, но это уже другая история

спасибо! Это и предполагал, но подумал, что мало ли там какой-то персистенс лёгкий был еще

А не рассматривали outbox-паттерн для решения этой задачи? Кажется он решит проблему без dlq, с сохранением всей необходимой истории и ретраями произвольное количество раз.

При этом не будет риска потери данных при отказе ноды, и проблем с graceful shutdown особо не будет

Внешний апи может не иметь дедупликации на своей стороне, чтобы в случае сбоя мы просто как в outbox заново ему зарядили бы сообщения, которые из-за сбоя не пометили как прочитанные.

Я думаю, тут есть ещё точно достаточное кол-во вариантов, как реализовать. Просто решил осветить свой.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации