Kafka - Потребительская точка зрения - интерпретация «преданного» сообщения - PullRequest
0 голосов
/ 17 июня 2020

Понятие "совершенное" сообщение часто сбивает с толку. Я сталкиваюсь с этим из https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/

Сообщение фиксируется только после того, как оно было успешно скопировано во все синхронизированные c реплики.

Думаю, «все» здесь относится ко всем репликам, которые зависят от фактора репликации. Скажем, если коэффициент репликации равен 3, для того, чтобы потребитель принял это сообщение, сообщение должно присутствовать во всех репликах (не обязательно на диске?), Независимо от настройки «acks». Надеюсь, мое понимание верное.

На данный момент, поскольку мы живем не в идеальном мире, где все работает, как ожидалось :-) - один из брокеров не работает, и сообщение отправлено производитель - предполагается, что это сообщение подтверждено, но не "зафиксировано" полностью, поскольку один из брокеров не работает. , можем ли мы предположить, что потребитель не может получить это сообщение по умолчанию?

1 Ответ

1 голос
/ 17 июня 2020

Важная часть описания - **in-sync** replicas. Реплики, которые не синхронизированы c, не учитываются.

Таким образом, если брокер не работает, он не является частью синхронизируемых c реплик и не помешает пометить запись как зафиксировано в журнале. Это позволяет брокерам перемещать свои верхние отметки уровня воды и предоставлять эту запись потребителям.

Вы правы, запись не обязательно должна сбрасываться на диск. Достаточно просто получить реплики, чтобы они все еще находились в памяти.

...