Потребитель Kafka пропускает сообщения во время развертывания

Мои потребители унаследованы от BasicKafkaConsumerV2. Во время развертывания, когда капсулы вращаются, я пропускаю несколько сообщений, что видно по смещениям, выводимым после ручной фиксации(). Предполагается, что Kafka не должна пропускать сообщения, если они не зафиксированы. В чем здесь может быть проблема.

Выполнить команду:

      - name: order-consumer
      image: KUSTOMIZE_PRIMARY
      imagePullPolicy: Always
      command:
        [
        # Invoking wait for pgbouncer script
          "/wait-for.sh",
          "localhost:6432",
          "-s",
          "-t",
          "30",
          "--",
        # Starting main process
          "ddtrace-run",
          "python",
          "manage.py",
          "run_order-consumer",
        ]

Потребитель:

Проверьте наличие проблемы дросселирования в grafana kafka не может обрабатывать сообщения размером >1MB, поэтому проверьте, не меньше ли размер сообщений. Если размер сообщений >1MB, используйте лучшую технику сжатия, разделите сообщения с помощью последовательности и опубликуйте их в виде фрагментов. В потребителе нам нужно разделить куски, чтобы получить оригинальное сообщение.

Можете ли вы предоставить записи журнала, которые показывают, что сообщения пропущены?

Похоже, что потребитель фиксирует текущее смещение, а затем регистрирует, что потребил сообщение из раздела.

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

Вы можете настроить terminationGracePeriodSeconds как часть спецификации развертывания стручков.

В рамках вашей программы на python вы также можете перехватить событие SIGTERM, когда вашему стручку будет предложено остановиться.

signal.signal(signal.SIGTERM, graceful_shutdown)

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

В этот момент он может чисто выйти.

Вернуться на верх