在我们的单节点开发环境中,卡夫卡的读取失败,我遇到了问题。
我们运行的是一个单节点kafka实例,以及一个单节点的-因为这是一个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)
造成这种情况的原因是什么,防止出现这些异常的正确配置是什么?
发布于 2018-05-04 01:54:35
上面发布的配置结果证明是正确的。
但是,当主题是最初创建的时,Zookeeper实例被错误地配置了,而重放日志中的消息似乎会抛出错误。
删除实例并从error重新启动解决了错误
发布于 2020-06-14 17:22:09
与删除动物园管理员实例并重新启动不同的是,我建议将主题的min.insync.replicas
( __transaction_state
、__transactionLog
(或者如果有其他的)减少到1,这可以通过使用kafka-configs.sh
实用工具来实现。
bin/kafka-configs.sh --bootstrap-server [host]:[port] --alter --entity-type topics --entity-name __transaction_state --add-config min.insync.replicas=1
使用min.insync.replicas
= 2对主题执行此操作。当主题的insync副本的值降至1时,Kafka将再次检查主题的min副本应该等于配置中设置的值的条件,这一次生产者将能够写入主题,而不会出现任何问题。
发布于 2018-05-03 09:16:19
尝试将复制因子设为2,这可能是因为主题分区的同步副本低于min.insync.replicas。
https://stackoverflow.com/questions/50160474
复制