Confluent Kafka Python производитель не производит с ACKS = все конфигурации - PullRequest
0 голосов
/ 09 января 2020

У меня есть некоторый python код, который будет выдавать в kafka topi c, это прекрасно работает с настройкой по умолчанию acks=1, но когда я изменяю на acks=all или acks=2, сообщение не заканчивается в топи c. min.insync.replicas config на topi c установлен на 2. После запуска кода не возвращается сообщение об ошибке, которое сбивает с толку? В кластере 3 брокера.

Вот код

from confluent_kafka import Producer
from kafka.errors import KafkaError

def get_producer_config():
    return Producer(get_config())


def get_config():
    conf = {
        'bootstrap.servers': 'localhost:9092',
        'acks': '2',
    }

    return conf

try:
    producer = get_producer_config()
    producer.produce('test', 'test message from local app')
    producer.flush()
except KafkaError as error:
    get_logger().error(str(error))

Это связано с отладкой лямбды-производителя kafka, где мы получали сообщение об ошибке KafkaError{code=NOT_ENOUGH_REPLICAS,val=19,str="Broker: Not enough in-sync replicas"} Я пытался выполнить верхнюю репликацию локально, но не получаю ошибку, но заметил это при попытке.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 января 2020

Подтверждения могут иметь только три значения:

  1. acks = 1: это значение по умолчанию, при котором только руководитель записывает сообщение в свой журнал, но отвечает, не ожидая полного подтверждения от всех подписчиков.
  2. acks = 0: производитель вообще не будет ждать никакого подтверждения от сервера. Запись будет немедленно добавлена ​​в буфер сокета и будет считаться отправленной.
  3. acks =all: Это означает, что ведущий будет ожидать полного набора синхронных c реплик для подтверждения записи. Это гарантирует, что запись не будет потеряна, пока хотя бы одна реплика in-syn c остается в живых. Это самая сильная доступная гарантия.

Кроме того, укажите действительное значение в min.insyn.replica, которое должно содержать номер. из реплик, включая лидера.

Например, если ваш коэффициент репликации равен 4, а ваш min.insyn c .replica = 3, это допустимая конфигурация для acks = all.

1 голос
/ 09 января 2020

1) Acks: 2 - не допускается.

Количество подтверждений, которые производитель должен получить от лидера, прежде чем считать запрос завершенным. Допустимые значения: 0 для отсутствия подтверждений, 1 для только лидера и -1 для полного ISR.

2) Необходимо проверить, topi c уровень конфигурации. Два параметра имеют отношение.
min.insync.replicas(ISR) <= replication-factor

...