Kafka 使用 MirrorMaker 跨机房数据同步实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka 使用 MirrorMaker 跨机房数据同步实践相关的知识,希望对你有一定的参考价值。
参考技术A南京 kafka 集群有 200+ kafka topic 数据需要镜像同步到重庆集群,源 kafka 现状如下:
使用 kafka mirrormaker 可以满足此需求,mirrormaker 是 kafka 官方提供的工具: $KAFAK_HOME/bin/kafka-mirror-maker.sh,在目标 kafka 集群创建好同名 topic,根据使用说明,配置 consumer procuder 配置,topic 信息等,就可以启动 mirror 了。
mirror-maker 的原理大概是启动 consumer 消费南京的 topic message,发送到重庆的 kafka 集群。数据流向:南京 kafka -> mirrormaker -> 重庆 kafka ,其中 mirrormaker 部署在重庆集群。
需要 mirror 的 topic 可以使用 java-style 正则表达式,两个 topic A ,B 可以写成 --whitelist \'A|B\' ,如果要 mirror 所有的 topic 可以使用 --whitelist \'*\'
对方反馈,集群内,单线程消费大 topic 速度是够的,能达到 6w+ message/sec,试图举证单分区没问题。其中的差异在于 kafka mirrormaker 是走了公网传输,先消费再 push 到目标 kafka 集群。为了验证是否是单 partition 的问题,做了如下测试:
测试结果如下,也验证了 kafka mirrormaker 跨集群环境下,多 parititon 的必要性
单分区优化前:
单分区优化后峰值:
(kafka topic parititon 为 1) = (数据只在一个 broker 上读写) = (消费端只能单线程消费),增加 parititon,数据可以水平扩展,topic 数据落在均衡的落在不同的 broker 上,生产和消费都是多对多,并行的关系,性能肯定优于单 partition。多对多的读写性能肯定优于单点的点对点读写。
这里有一份 kafka 性能测试报告 ,很明显的看出,多 partition 在性能上的优势,不管是 produer 写,还是消费者消费,性能都是成倍增长。
当然由此也可以看出 kafka 的性能还是很强悍的,万兆网卡的集群内,即使是单 partition 平均写入速度可达 10w records/sec。单线程 consumer 消费速度可达 34w records/sec。也解释了对方说的单 partition 性能能满足的问题。
通过 parititon 数,mirromaker 速度基本能跟上源集群,但是 lag 依然存在,处于一个不太可接受的值,超过 2w,部分数据量不大的 topic lag 值也超过 1000。
原因在于 kafka mirrormaker 的参数 --offset.commit.interval.ms,消费 offset 提交间隔,默认使用率 60s,60s 对于生产速度快的 topic 来说很长。
研究了一下这个参数,kafka consumer 配置里面有 old 和 new 之分,其中有个参数 auto.commit.interval.ms 的默认值有变更,旧的 60s 变为 5s,这样能侧面说明新的consumer 是觉得老的这个 60s 的默认配置不够合理,调整到 5s,一个比较合理的值。
3.3.1 Old Consumer Configs
3.3.2 New Consumer Configs
如下图,kafka mirrormaker 默认是使用 new consumer 见下图,但是 commit.interval.ms 配置还是沿用了 old consumer 的默认配置 60s。
以上是关于Kafka 使用 MirrorMaker 跨机房数据同步实践的主要内容,如果未能解决你的问题,请参考以下文章
Kafka跨集群迁移方案MirrorMaker原理使用以及性能调优实践
原理+实践,Kafka MirrorMaker使用与性能调优全解析