kafka集群中有些服务器磁盘IO util很高导致机器load居高不下,想把这些机器的partition数据文件夹分到多个挂载不同磁盘的目录上降低单个磁盘的IO。主要有两种方法:
删除当前的数据文件夹下所有内容
重新配置server.properties中log.dirs参数,添加多个目录,逗号隔开,重启kafka。该操作会删除掉该机器所有数据,重启后该节点会去其他kafka节点找寻replication并拉取,新的数据会写入到配置的多个目录中。即,该方法适合于GB级别的数据量,如果数据量较大,节点重新加入ISR的时间会很长,并且会给网络/集群带来很高负载。移动部分partitions文件夹并修改offset-checkpoint文件
每个log.dirs设置的目录下都会有三个offset-checkpoint文件和meta.properties文件:replication-offset-checkpoint, recovery-point-offset-checkpoint和cleaner-offset-checkpoint,这三个文件中包含partition当前提交的offset等信息,meta.properties文件包含当前版本号和该节点的id信息。我们只需要拷贝并修改这四个信息文件,然后移动partition数据文件夹到新文件夹中重启kafka即可,由于该节点之前的数据未丢失,所以节点重启后会很快恢复加入ISR。
offset-checkpoint文件的说明和该方法的具体操作.
当然直接停掉kafka然后移动部分partition数据文件夹到新目录做软链也可行,只是当删除该topic的时候也只会删除链接文件