kafka相关实践&经验总结

Kafka快的原因:
1、partition顺序读写,会先写入页缓存,再写入磁盘,充分利用磁盘特性,这是基础;

2、Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入;

3、页缓存技术在读取时可以实现零拷贝,减少io,加快socket传输速度
4、Customer从broker读取数据,向broke提供topic、partition、offset,找到分区index和log文件,通过二分查找定位数据,采用sendfile,将磁盘文件读到OS内核缓冲区后,直接转到socket buffer进行网络发送。

kafka配置需求:

磁盘 > jvm内存

jvm一般5G左右足够了

consumer_group提交记录定位:

kafka 默认topic __consumer_offsets下的分区对应的是Math.abs("${your.group.id}".hashCode()) % 50 

记录着你这个消费组的offset
看到__consumer_offsets topic的每一日志项的格式都是:[Group, Topic, Partition]::[OffsetMetadata[Offset, Metadata], CommitTime, ExpirationTime]

Kafka安全的&高可靠配置:

  • topic的配置:replication.factor>=3,即副本数至少是3个;2<=min.insync.replicas<=replication.factor

  • broker的配置:leader的选举条件unclean.leader.election.enable=false

  • producer的配置:request.required.acks=-1(all),producer.type=sync

 

参考:https://blog.csdn.net/gxsenjoy/article/details/70904615

Kafka各场景测试总结:

- 当acks=-1时,Kafka发送端的TPS受限于topic的副本数量(ISR中),副本越多TPS越低;
- acks=0时,TPS最高,其次为1,最差为-1,即TPS:acks_0 > acks_1 > ack_-1;
- min.insync.replicas参数不影响TPS;
- partition的不同会影响TPS,随着partition的个数的增长TPS会有所增长,但并不是一直成正比关系,到达一定临界值时,partition数量的增加反而会使TPS略微降低;

- retries不为0时,在broker发生异常后,可能会存在消息重复落盘的情况

其他文献: https://www.jianshu.com/p/1c2596d2d235

猜你喜欢

转载自www.cnblogs.com/but999/p/12674699.html
今日推荐