Запись kafka подтверждается, но данные не возвращаются потребителю - PullRequest
2 голосов
/ 29 мая 2019

Существует кластер Kafka (версия 2.2.0) из 3 узлов.Один узел становится искусственно недоступным (отключение сети).Тогда мы имеем следующее поведение:

  1. Мы отправляем запись производителю с заданным тематическим разделом (в конкретный раздел, скажем, # 0).

  2. Мы получаем метаданные записи от производителя, которые подтверждают, что они были подтверждены.

  3. Сразу после этого мы опрашиваем потребителя, назначенного тому же разделу темы, и смещения, взятого из метаданных записи.Время ожидания опроса было установлено на 30 секунд.Данные не возвращаются (возвращается пустой набор).

Время от времени это происходит непоследовательно (при описанных обстоятельствах с отказом одного узла Кафки).

По существу мойВопрос в том, должны ли данные быть немедленно доступны потребителям, если они признаны?Какой разумный тайм-аут для этого, если нет?

UPD: некоторые сведения о конфигурации:

  • количество разделов для темы: 1
  • коэффициент репликации по умолчанию: 3
  • фактор репликации синхронизации: 2
  • подтверждения для производителя: все

1 Ответ

1 голос
/ 30 мая 2019

Значение по умолчанию acks для производителя - 1. Это означает, что производитель ожидает подтверждения только от реплики лидера. Если лидер умрет сразу после подтверждения, сообщение не будет доставлено.

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

Если вы хотите убедиться, что сообщение не может быть потеряно, вам нужно настроить производителя на «acks = all» в дополнение к min.insync.replicas = 2. Это позволит убедиться, что все синхронизированные реплики подтверждают сообщение, и как минимум 2 узла. Таким образом, вы все еще можете потерять один узел и все будет в порядке. Потеряйте 2 узла, и вы не сможете отправлять, но даже тогда сообщения не будут потеряны.

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