тем что, когда брокер перестаёт работать то приложение ждёт 1 минуту, и пишет в основном поток что Кафка не доступна.
при этом основной поток блокируется
Будет ли правильным делать логику отправки/ожидания сообщений, producer.send()
через пул потоков?
Тебе нужен fire and forget продюссер, я правильно понимаю?
у меня нет необходимости в обязательной доставки, но необходимо чтобы приложение основное продюсер не останавливал на время отправки
Ну пока что в кафке так нельзя, так как продюссеру нужны метаданные(хотя бы чтоб партицию вычислить), но в случае, если ты отправлял уже сообщения в какой-то топик, то пока не пройдет таймаут, продюссер блокироваться не будет, так как метаданные per топик. Но у кафки есть тикет сделать fire and forget и класть в in-memory очередь, если брокер недоступен.
После вызова send, и если acks 0, что делает кафка? Он кладёт в in-memory и пытается отправить следующее сообщение?
Нет, на данный момент никакой in-memory очереди не существует (ну кроме буферов, но это не то), он отправит сообщение, не дожидаясь ответа от брокера, но проблема в том, что отправить сообщение без брокера продюссер не сможет.
кафка аппендер может асинхронно отправлять
Если брокер не доступен, то будет тормозить в send(default 1 minutes)
Обсуждают сегодня