大家好,又见面了,我是你们的朋友全栈君。
Kafka集群的服务发现是有zk实现的,因此想kafka集群添加新的broker就非常容易。我们只需要为新的broker设置一个唯一的broker.id, 然后启动新增的kafka就行。Kafka集群会自动发现新增的broker并同步原数据,包括当前集群有哪些topics以及topics的分区信息等。
但是我们需要的注意的一点,新增的broker不能分担之前已经创建的topic的负载,必须手动执行重新分区才能从为新增broker添加之前的已经存在的topics服务。当然如果不执行重新分组,之后新添加的topics会自动将负载分担到新broker上。
Kafka提供的重分区工具是kakfa-reassign-partitions.sh(bat),默认在<kafka_install_dir>\bin, 例如,
分区重新分配工具可以以3种互斥模式运行:
--generate:在此模式下,给定主题列表和代理列表,该工具会生成候选重新分配,以将指定主题的所有分区移动到新代理。此选项仅提供了一种方便的方法,可在给定主题和目标代理列表的情况下生成分区重新分配计划。
--execute:在此模式下,该工具根据用户提供的重新分配计划启动分区的重新分配。(使用--reassignment-json-file选项)。这可以是由管理员手工制作的自定义重新分配计划,也可以使用--generate选项提供
--verify:在此模式下,该工具将验证最后一次--execute期间列出的所有分区的重新分配状态。状态可以是成功完成,失败或正在进行中
操作
我先只有一个broker0, 然后创建了yqtopic1和yqtopic2两个topic, 这两个topic都是2个分区,一个副本(一个broker上副本机制效果不大,只是为了演示)
1, 第一步生成重分区文件
创建一个要重分区的topic文件 yqToMoveTopics.json
{
"topics": [{
"topic": "yqtoipc1"},
{
"topic": "yqtopic2"}],
"version":1
}
./kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file yqToMoveTopics.json --broker-list "0,1" --generate
2, 执行重分区
./kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file /opt/reassign-partitions.json --execute
3, 验证重分区成功
./kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file /opt/reassign-partitions.json --verify
先创建对象的topic
启动broker2后,重新分配分区
具体可以看截图消息。 因为我的topic数据很少,所以可以快速完全重新分区,但是实际生产系统,我们一定要选择业务空闲期执行,而且数据量大的话会执行很长时间。
备注:kafka还提供重分区时限制带宽以保证生产系统平稳。
官方文档:http://kafka.apache.org/10/documentation.html#rep-throttle
kafka-reassign-partitions.sh –zookeeper myhost:2181–execute –reassignment-json-file bigger-cluster.json —throttle 50000000
这样当执行重分区时,你会发现he throttle limit was set to 50000000 B/s, 也就是速率被限制在每秒50000000字节。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145876.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...