问题描述
我在两个位置 A 和 B(每个位置两个)运行 4 个 Kafka 代理。我希望进行设置,以便在任何 2 个代理变得不可用时应用程序可以继续运行,而不会丢失数据/重复事件(恰好一次语义),同时实现我所能达到的最佳性能。
目前我正在查看以下设置:
log.retention.hours = 24
offsets.retension.minutes = 1500 (25hrs - figure its safer to have +1hr)
offset.topic.replication.factor = 4
min.insync.replicas = 2
transaction.state.log.min.isr = 2
transaction.state.log.replication.factor = 4
broker.rack = A or B
default.replication.factor = 4
num.partitions = 50
replica.selector.class = RackAwareReplicaSelector (for consumption)
消费者属性:
auto commit = false
isolation level = read committed
生产者属性:
idempotence = true
transaction_id = <some unique id>
读取偏移量与任何新记录(通过事务)以原子方式提交。
我的问题是,这些设置是否符合我对 HA 的期望接受标准?如果 ISR min 设置为 2,则同一位置的副本可能会首先 ACK,随后如果该位置离线,我将处于不确定状态,可能会丢失数据。
如果我设置 ISR min = 3,那么我需要 3 个代理才能让我的应用程序继续运行。
这是正确的吗?有没有更好的设置方法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)