假设我想在小型部署的生产环境中拥有高度可用的 Kafka。我必须使用以下配置
min.insync.replicas=2 // Don't want to lose messages in case of 1 broker crash
default.replication.factor=3 // Will let producer write in case of 1 replica disappear with broker crash
Run Code Online (Sandbox Code Playgroud)
如果 1 个 broker 崩溃并且 1 个副本消失,Kafka 会开始制作新副本吗?
在任何情况下,我们是否必须至少有default.replication.factor数量的经纪人才能继续工作?
鉴于
1.五机Kafka集群
2. 1主题与1分区
3.持久存储为msgs
4.每消息1 KB
5. 10生产者
现在,这个集群的最大写入能力是否等于一个java线程的最大写入能力到磁盘上?如果不是,它会是什么?
有两种保持副本同步的常见策略,即主备份复制和基于仲裁的复制,如此处所述
\n\n\n\n\n在主备复制中,领导者会等待组中每个副本的写入完成,然后再确认客户端。如果其中一个副本发生故障,领导者会将其从当前组中删除,并继续写入其余副本。如果失败的副本返回并赶上领导者,则允许其重新加入组。通过 f 个副本,主备复制可以容忍 f-1 故障。
\n\n在基于仲裁的方法中,领导者会等待,直到大多数副本上的写入完成。即使某些副本已关闭,副本组的大小也不会改变\xe2\x80\x99t\n。如果有 2f+1 个副本,\n 基于仲裁的复制可以容忍 f 个副本失败。如果领导者失败,则至少需要 f+1 个副本才能选举新的领导者。
\n
If the leader fails, it needs at least f+1 replicas to elect a new leader
我对基于法定人数的方法中的声明有疑问。我的问题是为什么f+1
需要 at 副本的法定人数(多数)来选举新的领导者?f+1
为什么不选择同步副本(ISR)之外的任何副本?为什么\n我们需要选举而不是简单的任意选择?
对于选举,zookeeper 如何从剩余副本中选举出最终的领导者?它会比较哪个副本是最新更新的吗?另外,为什么我需要奇数数量(比如 3)的 Zookeper 来选举领导者,而不是偶数数量(比如 2)?
\n我们正在尝试使用 kafka 集群来实现 Kafka HA。在做研发的时候,我们发现zookeeper & kafka broker推荐的最小节点数是3。
我们理解为什么 Zookeeper 应该至少有 3 个节点,因为对于领导者选举,最少 (n+1)/2 个节点应该启动并运行。
但不清楚,为什么至少需要 3 个 kafka 经纪人。为什么我们不能用 2 个 kafka 代理和 3 个 zookeepr 节点来实现 HA?
有Kafka cluster
和Kafka broker
一样的意思吗?
我知道集群有多个代理(这是错误的吗?)。
但是当我编写代码来生成消息时,我发现很尴尬option
。
props.put("bootstrap.servers", "kafka001:9092, kafka002:9092, kafka003:9092");
Run Code Online (Sandbox Code Playgroud)
这是代理地址还是集群地址?如果这是经纪人地址,我认为这不好,因为当经纪人计数变化时我们必须修改上面的地址。
(但这似乎是经纪人地址..)
此外,我在亚马逊看到MSK
,我们可以向每个AZ
.
这意味着,我们不能有很多经纪人。(最多三四个?)
他们指导我们应该将此代理地址写入 bootstrap.server option as a
,`单独的列表。
为什么他们不指导我们使用集群地址或ARN
?