transaction.state.log.min.isr到底是什么意思?

时间:2019-07-04 12:32:07

标签: apache-kafka

在所有情况下,如果有任何一个Kafka经纪人启动并运行,我的生产者和消费者应能正常运行。

以下server.properties内的参数表示群集的高可用性。

transaction.state.log.min.isr=2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
  1. 如果所有3个Kafka代理(K1,K2和K3)都已启动,则群集运行良好。
  2. 如果K1和K2代理发生故障,而只有K3发生故障,则集群运行正常。
  3. 如果所有服务器都已关闭并且我们启动了K1 Broker,群集将停止接收消息,并且使用者也将停止。

请让我知道我是否缺少某些物品,以及如果我设置了transaction.state.log.min.isr=3会怎样?

谢谢。

2 个答案:

答案 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)。