1.8Kпросмотров
75.1%от подписчиков
4 марта 2026 г.
Score: 2.0K
Долги Всем привет. Подумать только, примерно неделю назад я гуляла по Дубаю, смотрела настоящий скелет Диплодока в Дубай Моле, и там было всё прекрасно. Погуляли, вылетели домой в Петербург. Кажется, я везучая, что успела вернуться. Я делала серию полезных постов про Kafka. Например, подробно рассказала, как развернуть Kafka локально; у поста суммарно более 150 пересылок. Очень надеюсь, что вы не только отправили себе, но и развернули. Ещё вот тут я спрашивала вас, какие вопросы про Kafka вам интересны, и обещала разобрать. Один из вопросов был: как Kafka понимает, что consumer вычитал сообщение? И тут дело в следующем: а может ли Kafka это понять? Формально принято считать, что вычитанные сообщения — это обработанные консьюмером. Когда консьюмер обработал сообщение, он фиксирует offset. Давайте к теории. Есть топики (темы), внутри каждого топика есть партиции, в каждой партиции сообщение имеет уникальный номер/смещение (offset). Например, partition-0: offset 0, offset 1, offset 2, offset 3... Consumer читает сообщения. Сообщения в Kafka не удаляются после чтения. Допустим, что Consumer получает сообщение с offset = 5. Это не является обработкой сообщения. А вот когда консьюмер коммитит/фиксирует offset — вот ключевой момент. Коммит офсета для Kafka — это понимание, что консьюмер обработал все сообщения до offset 5 включительно. Этот offset сохраняется в специальном топике. Дальше интересно. Consumer может фиксировать offset автоматически или вручную. Если консьюмер автоматически отправляет commit раз в N миллисекунд, то тут может возникнуть проблема, когда приложение упало между чтением и обработкой; тогда будет или потеря сообщения, или его повторная обработка. Коммитинг сообщений ещё зависит от гарантий доставки в Kafka: At most once (commit до обработки), At least once (commit после обработки), Exactly once (idempotent producer + transactions). Краткий ответ: Kafka понимает, что сообщение вычитано, когда consumer зафиксировал offset. Без commit для Kafka сообщение считается необработанным. Полезно -❤️? Если есть ещё вопросы про Kafka, то пишите в комментариях.