Рейтинг:0

Журналы Kafka сбрасываются, когда все брокеры перезапускаются одновременно

флаг cn

У меня есть кластер kafka, работающий в интеграционном кластере Kubernetes с 3 брокерами Kafka и 3 Zookeeper, каждый компонент работает в наборе состояний. Руководящая диаграмма, которую я использую для развертывания кластера, является пользовательской, так как мне нужен внешний доступ к кластеру через BigIp F5, и я не нашел руководящей диаграммы для этого.

Образ Кафки — это confluentinc/cp-кафка: 5.4.0 и смотритель зоопарка confluentinc/cp-zookeeper:5.4.0

/var/lib/zookeeper/данные и /var/lib/zookeeper/журнал для Zookeeper сопоставляются с постоянными томами. То же самое для /var/lib/кафка о Кафке

Я использую hlebalbau/kafka-manager:stable для просмотра состояния кластера.

Я ставлю по три раздела на топик, и коэффициент репликации тоже равен трем.

Недавно я понял, что если я перезапущу все три брокера kafka одновременно (с kubectl удалить модуль) все содержимое темы было потеряно:

  • размер журнала падает до нуля для каждой темы
  • список тем остался прежним
  • список потребителей остается прежним, но текущее смещение каждого потребителя падает до отрицательного значения (если потребитель был со смещением 10000 для темы сообщения 10000, тогда размер темы падает до нуля, а смещение потребителя до -10000 )

Я никогда не сталкивался с какими-либо проблемами при перезапуске одного брокера kafka за раз и ожидании его запуска перед перезапуском другого. Я знаю, что кластер kafka не предназначен для остановки или перезапуска таким образом. Но такого поведения я не ожидал.

Это ожидаемое поведение? Или я пропустил что-то очевидное?

Вот мой шаблон Yaml для брокера kafka. Как видно из его названия, ждать-zookeeper.sh скрипт "просто" ждет запуска зоопарков.

---
apiVersion: приложения/v1
вид: StatefulSet
метаданные:
  имя: кафка-контроллер-1
спецификация:
  реплики: 1
  селектор:
    метки соответствия:
      приложение: кафка-1
  serviceName: kafka1-безголовый
  шаблон:
    метаданные:
      этикетки:
        приложение: кафка-1
        кластер: кафка
    спецификация:
      initContainers:
        - имя: init-wait-zookeeper
          изображение: bash: последний
          команда: ["/usr/local/bin/bash", "-c", "cp /wait-zookeeper-configmap/wait-zookeeper.sh /wait-zookeeper-emptydir/ && chmod 755 /wait-zookeeper-emptydir/ ожидание-zookeeper.sh && /wait-zookeeper-emptydir/wait-zookeeper.sh"]
          томМаунты:
            - имя: ожидание-зоокипер-configmap
              путь монтирования: /wait-zookeeper-configmap
            - имя: ожидание-zookeeper-emptydir
              путь монтирования: /wait-zookeeper-emptydir
      сходство:
        подантиаффинити:
          предпочтительныйDuringSchedulingIgnoredDuringExecution:
          - вес: 100
            podAffinityTerm:
              селектор меток:
                matchExpressions:
                - ключ: приложение
                  оператор: В
                  ценности:
                  - кафка-2
                  - кафка-3
                  {{- если gt .Values.workerNodesNumber 5.0 }}
                  - зоозащитник-1
                  - зоозащитник-2
                  - зоозащитник-3
                  {{- конец }}
              topologyKey: "kubernetes.io/hostname"
      контейнеры:
        - имя: кафка1
          изображение: confluentinc/cp-kafka:5.4.0
          Ресурсы:
            Запросы:
              память: "512Ми"
            пределы:
              память: "{{.Values.jvmMaxHeapSizeGb}}Gi"
          порты:
          - контейнерПорт: 9092
          среда:
          - имя: HOST_IP
            значениеОт:
              fieldRef:
                путь к полю: status.hostIP
          - имя: KAFKA_LISTENERS
            значение: "ОБЫЧНЫЙТЕКСТ://0.0.0.0:9092"
          - имя: KAFKA_ADVERTISED_LISTENERS
            значение: "PLAINTEXT://$(HOST_IP):{{ добавить .Values.startingNodePort 0 }}"
          - имя: KAFKA_BROKER_ID
            значение: "10"
          - имя: KAFKA_ZOOKEEPER_CONNECT
            значение: "zookeeper-controller-1-0.zoo1-headless:2181,zookeeper-controller-2-0.zoo2-headless:2181,zookeeper-controller-3-0.zoo3-headless:2181"
          - имя: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
            значение: "3"
          - имя: KAFKA_DELETE_TOPIC_ENABLE
            значение: "истина"
          - имя: KAFKA_DEFAULT_REPLICATION_FACTOR
            значение: "3"
          - имя: KAFKA_NUM_PARTITIONS
            значение: "{{.Values.defaultPartitionsNumber}}"
          - имя: KAFKA_LOG_RETENTION_HOURS
            значение: "{{.Values.retentionTimeHours}}"
          - имя: KAFKA_OFFSETS_RETENTION_MINUTES
            значение: "{{.Values.retentionTimeHours | mul 60 }}"
          - имя: JMX_PORT
            значение: "{{ добавить .Values.startingNodePort 3 }}"
          - имя: KAFKA_JMX_HOSTNAME
            значение: "кафка-сервис-1"
          - имя: KAFKA_HEAP_OPTS
            значение: "-Xms512m -Xmx{{.Values.jvmMaxHeapSizeGb}}G"
          живостьзонд:
            исполнитель:
              команда:
              - /бин/баш
              - -с
              - "отключить JMX_PORT && kafka-broker-api-versions --bootstrap-server=localhost:9092"
            начальные секунды задержки: 60
            периодСекунды: 20
          томМаунты:
            - название: "кафка-журналы"
              mountPath: "/var/lib/kafka"
      тома:
        - имя: "подожди-зоокипер-configmap"
          карта конфигурации:
            имя: "кафка-инициализатор"
            Предметы:
              - ключ: "wait-zookeeper.sh"
                путь: "wait-zookeeper.sh"
        - имя: "wait-zookeeper-emptydir"
          пустойКаталог: {}
  шаблоны VolumeClaim:
  - метаданные:
      имя: кафка-журналы
    спецификация:
      storageClassName: {{.Values.storageClassName}}
      режимы доступа: ["ReadWriteOnce"]
      Ресурсы:
        Запросы:
          хранилище: {{.Values.storageSizeGb}}Gi
флаг ar
Начни здесь. Он настраивает для вас объемы - https://strimzi.io

Ответить или комментировать

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