在我们的单节点开发环境中,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
我使用的是Kafka1.0.0,如日志所示:
INFO Kafka version : 1.0.0-cp1 (org.apache.kafka.common.utils.AppInfoParser)
造成这种情况的原因是什么?防止这些异常发生的正确配置是什么?
6条答案
按热度按时间c2e8gylq1#
将insync和default replication设置为相同的值min.insync.replicas=1 default.replication.factor=1
bakd9h0s2#
与其删除zookeeper示例并重新开始,我建议减少
min.insync.replicas
主题__transaction_state
,__transactionLog
(或如果有其他人)到1。这可以通过使用kafka-configs.sh
实用程序。对具有的主题执行此操作
min.insync.replicas
= 2. 当主题的insync replicas的值降为1时,kafka将再次检查主题的min insync replicas应等于配置中设置的值的标准,这一次生产者将能够在没有任何问题的情况下写入主题。2ledvvac3#
https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/cluster/partition.scala#l569-l572型
这就是异常发生的地方。您将min.insync.replicas设置为2,但isr大小为1(isr:0)
准备两个或多个代理并使用选项--replication factor 2创建主题
mrwjdhj34#
上面发布的配置结果是正确的。
但是,zookeeper示例在最初创建主题时配置不正确,从日志中重放消息似乎会引发错误。
删除zookeeper示例并从fresh重新开始可以解决此错误
scyqe7ek5#
尝试将复制因子设置为2,这可能是因为主题分区的同步副本已低于min.insync.replicas
6uxekuva6#
这是默认配置,但您可以根据主题覆盖它。覆盖存储在zookeeper中,正如您从主题描述中所读到的那样。