Kafka 复制可以部署在不同的机器上吗?
Can Kafka replication deploy on different machine?
我是运行一个项目。我的目标是设计一个 Kafka 集群。防止一台机器挂掉,那台Kafka上的数据全部消失。我想知道Kafka复制是否可以设置在不同的机器上以便备份?
是的,复制因子定义了这一点。
在 Kafka 中,您可以为主题定义复制因子,这样每个分区都会复制到更多代理上。其中之一是生产者和消费者连接以交换消息的领导者。另一个将是追随者,他们从领导者那里获得同步的消息副本。如果领导者宕机,将在所有同步副本之间开始新的领导者选举。 Kafka 将支持 N-1 个失败的代理,其中 N 是复制因子。
除了在您的主题上设置 2 或 3 的复制因子以确保最终创建备份副本外,您还应该使用 acks=all 发布消息以确保确认表明数据已被写入的保证到所有副本。否则,当 acks=1 时,你只会在提交 1 个副本后得到一个 ack,而 acks=0 时,你根本不会得到任何 ack,所以你永远不会知道你发布的消息是否进入了 Kafka 提交日志。
同时将 unclean leader election 参数设置为 false 以确保只有不同步的副本才能成为 leader。
我是运行一个项目。我的目标是设计一个 Kafka 集群。防止一台机器挂掉,那台Kafka上的数据全部消失。我想知道Kafka复制是否可以设置在不同的机器上以便备份?
是的,复制因子定义了这一点。
在 Kafka 中,您可以为主题定义复制因子,这样每个分区都会复制到更多代理上。其中之一是生产者和消费者连接以交换消息的领导者。另一个将是追随者,他们从领导者那里获得同步的消息副本。如果领导者宕机,将在所有同步副本之间开始新的领导者选举。 Kafka 将支持 N-1 个失败的代理,其中 N 是复制因子。
除了在您的主题上设置 2 或 3 的复制因子以确保最终创建备份副本外,您还应该使用 acks=all 发布消息以确保确认表明数据已被写入的保证到所有副本。否则,当 acks=1 时,你只会在提交 1 个副本后得到一个 ack,而 acks=0 时,你根本不会得到任何 ack,所以你永远不会知道你发布的消息是否进入了 Kafka 提交日志。
同时将 unclean leader election 参数设置为 false 以确保只有不同步的副本才能成为 leader。