Как получить признание от Кафки

Как мне точно получить подтверждение от Kafka после того, как сообщение будет использовано или обработано. Это может показаться глупым, но есть ли способ узнать начальное и конечное смещение того сообщения, для которого было получено подтверждение?


person Hild    schedule 31.07.2013    source источник


Ответы (2)


Пока что я обнаружил, что в 0.8 они представили следующий способ выбора смещения для чтения.

kafka.api.OffsetRequest.EarliestTime () находит начало данных в журналах и начинает потоковую передачу оттуда, kafka.api.OffsetRequest.LatestTime () будет передавать только новые сообщения.

пример кода https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

Все еще не уверен в части подтверждения

person Hild    schedule 12.08.2013

Кафка на самом деле не предназначен для этого. Чтобы понять, почему, просмотрите документацию по дизайну здесь.

Чтобы обеспечить одноразовое подтверждение, вам нужно будет создать некоторую внешнюю систему отслеживания для вашего приложения, где вы явно пишете подтверждения и реализуете блокировки по идентификаторам транзакции, чтобы гарантировать, что что-то обрабатывается только один раз. Вычислительная стоимость внедрения такой системы как система чрезвычайно высока и является одной из основных причин того, что большие транзакционные системы требуют сравнительно экзотического оборудования и имеют, возможно, более низкую масштабируемость, чем такие системы, как Kafka.

Если вам не нужна строгая семантика устойчивости, вы можете использовать API групп, чтобы приблизительно отслеживать, когда было прочитано последнее сообщение. Это гарантирует, что каждое сообщение будет прочитано хотя бы один раз. Обратите внимание, что, поскольку API групп не предоставляет вам возможности явно отслеживать собственную логику обработки ваших приложений, ваши фактические гарантии обработки в этом сценарии довольно слабы. В этой среде распространены схемы, основанные на идемпотентной обработке.

В качестве альтернативы вы можете использовать API SimpleConsumer с плохим именем (его довольно сложно использовать), который позволяет вам явно отслеживать временные метки в вашем приложении. Это наивысший уровень гарантии обработки, который может быть достигнут с помощью собственного API Kafka, поскольку он позволяет отслеживать обработку ваших приложений данных, считываемых из очереди.

person Ed Kohlwey    schedule 24.02.2014