Kafka TransactionsLog завершается с NotEnoughReplicasException, несмотря на правильную настройку - PullRequest
0 голосов
/ 03 мая 2018

У меня проблемы с чтением из Kafka в наших одно-узловых средах разработки

Мы работаем с одноузловым экземпляром kafka и одноузловым Zookeeper - так как это dev env, нам на самом деле нет дела до репликации.

Мы используем Kafka в качестве хранилища событий для сохранения Akka. Когда мы пытаемся читать сообщения (даже из пустой темы), мы получаем NotEnoughReplicasException поднял:

[2018-05-03 16:57:00,880] ERROR [ReplicaManager broker=0] Error processing append operation on partition __transaction_state-7 (kafka.server.ReplicaManager)
org.apache.kafka.common.errors.NotEnoughReplicasException: Number of insync replicas for partition __transaction_state-7 is [1], below required minimum [2]
[2018-05-03 16:57:00,889] INFO [Transaction State Manager 0]: TransactionalId akka-journal-message-AkkaJavaSpring-4 append transaction log for TxnTransitMetadata(producerId=6000, producerEpoch=0, txnTimeoutMs=60000, txnState=Empty, topicPartitions=Set(), txnStartTimestamp=-1, txnLastUpdateTimestamp=1525366620855) transition failed due to COORDINATOR_NOT_AVAILABLE, resetting pending state from Some(Empty), aborting state transition and returning COORDINATOR_NOT_AVAILABLE in the callback (kafka.coordinator.transaction.TransactionStateManager)

Я настроил следующие параметры:

"min.insync.replicas": 1
"offsets.topic.replication.factor": 1
"transaction.state.log.replication.factor": 1
"transaction.state.log.min.isr" : 1

, что подтверждается в выходных данных конфигурации, зарегистрированных при запуске:

[2018-05-03 16:33:34,381] INFO KafkaConfig values: 
    ...snip...
    min.insync.replicas = 1
    num.io.threads = 8
    num.network.threads = 3
    num.partitions = 1
    ...snip...
    transaction.state.log.load.buffer.size = 5242880
    transaction.state.log.min.isr = 1
    transaction.state.log.num.partitions = 50
    transaction.state.log.replication.factor = 1
    transaction.state.log.segment.bytes = 104857600

Однако при запросе к теме __transactionLog кажется, что для min.insync.replicas установлено значение 2:

/usr/bin/kafka-topics --zookeeper zookeeper:2181 --describe

Topic:__transaction_state       PartitionCount:50       ReplicationFactor:1     Configs:segment.bytes=104857600,unclean.leader.election.enable=false,compression.type=uncompressed,cleanup.policy=compact,min.insync.replicas=2
        Topic: __transaction_state      Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: __transaction_state      Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: __transaction_state      Partition: 2    Leader: 0       Replicas: 0     Isr: 0
        Topic: __transaction_state      Partition: 3    Leader: 0       Replicas: 0     Isr: 0

Я использую Kafka 1.0.0, как показано в журналах:

 INFO Kafka version : 1.0.0-cp1 (org.apache.kafka.common.utils.AppInfoParser)

Что является причиной этого и какова правильная конфигурация для предотвращения возникновения этих исключений?

Ответы [ 4 ]

0 голосов
/ 09 мая 2019
[2018-05-03 16:33:34,381] INFO KafkaConfig values: 
    ...snip...
    min.insync.replicas = 1

Это конфигурация по умолчанию, но вы можете переопределить ее для каждой темы. Переопределения хранятся в Zookeeper, как вы прочитали из описания темы.

0 голосов
/ 04 мая 2018

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/cluster/Partition.scala#L569-L572

if (inSyncSize < minIsr && requiredAcks == -1) {
    throw new NotEnoughReplicasException("Number of insync replicas for partition %s is [%d], below required minimum [%d]"
      .format(topicPartition, inSyncSize, minIsr))
}

Здесь происходит исключение. Вы устанавливаете min.insync.replicas = 2, но размер isr равен 1 (ISR: 0)

вы готовите двух или более брокеров и создать тему с опцией --replication-factor 2

0 голосов
/ 04 мая 2018

Выложенный выше конфиг оказался верным.

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

Удаление экземпляра Zookeeper и повторный запуск с новой версии устранили ошибку

0 голосов
/ 03 мая 2018

Попробуйте сделать коэффициент репликации равным 2. Это может быть из-за того, что в репликах синхронизации для раздела раздела значение меньше min.insync.replicas

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