kafka01:10.1.1.10
kafka02:10.1.1.11
kafka03:10.1.1.12
目标集群
kafka11:10.1.1.13
kafka12:10.1.1.14
kafka13:10.1.1.15
公司新业务需要从其他部门取到Kafka中的数据到我们的Kafka集群,这里使用Kafka自带的kafka-mirror-maker工具进行数据的同步,数据流向为源端数据到目标集群,具体配置看下面配置,这里只提供基础的配置,生产中使用请去官网根据文档配置自己需要的个性化配置。
在目标端集群配置$KAFKA_HOME/config/consumer.properties
group.id可以自己定义
在目标端集群配置$KAFKA_HOME/config/producer.properties
在目标端及源端各自新建test02的topic
在目标端启动同步进程(如要后台启动请加nohup)
===测试===
在源端启动生产者进程
在目标端启动消费者进程,在消费端能看到生产者发送的信息即可
南京 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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)