在所有情况下,如果有任何一个Kafka经纪人启动并运行,我的生产者和消费者应能正常运行。
以下server.properties
内的参数表示群集的高可用性。
transaction.state.log.min.isr=2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
请让我知道我是否缺少某些物品,以及如果我设置了transaction.state.log.min.isr=3
会怎样?
谢谢。
答案 0 :(得分:0)
transaction.state.log.min.isr只是专用的min.insync.replicas,但用于__transaction_state主题(当您开始使用事务时创建的内部主题)。因此,这只是覆盖min.insync.replicas。
也许您已经知道,但是将min.insync.replicas设置为2意味着当您的生产者(带有acks = all)将产生特定主题的记录时,相应的代理将等待另外两个isr确认该写入
与transaction.state.log.min.isr行为相同,但这仅适用于__transaction_state内部主题
因此,当复制因子为3时,将其设置为2是很有意义的。
但是,不确定要了解您的意思吗?
如果所有3个Kafka代理(K1,K2和K3)都已启动,则群集运行良好。 ==>确实
如果K1和K2代理发生故障,而只有K3发生故障,则集群可以正常运行。
==>您将无法生成(acks = all或> 1)新记录,因为无法满足复制因子。
此外,您将无法在制作/消费时创建新主题(将获得INVALID_REPLICATION_FACTOR)
您的集群绝对不好
Yannick
答案 1 :(得分:0)
transaction.state.log.min.isr
的作用是覆盖交易主题-min.insync.replicas
的{{1}}配置。
基本上,它控制此主题的最低ISR。
在您提到的情况下-
如果K1和K2代理发生故障,而只有K3发生故障,则集群可以正常运行。
集群将无法正常运行,并且您将无法生成该集群。生产者将引发__transaction_state
异常。
之所以会发生这种情况,是因为您没有达到所进行的配置。
例如,您在名为NotEnoughReplicas
的主题上使用3的复制因子,并且您的代理设置为2的mycooltopic
。
当产生为min.insync.replicas
(与mycooltopic
)时,您将需要至少有2个副本,这些副本必须先确认该写入,然后才能将其视为成功写入。
因此,如果要将acks=all/-1
更改为3-您将需要向群集中添加更多代理。
您可以在Confluent博客-Hands-free Kafka Replication中了解有关Kafka复制的更多信息,并查看official documentation(跳至min.insync.replicas
)。