赞
踩
生产者(生产消息)、Broker(中间人)、消费者(消费消息)、ZK(注册消息)
注意:Zookeeper中保存Broker id和消费者offsets等信息,但是没有生产者信息。
官方自带压力测试脚本,kafka-consumer-perf-test.sh\kafka-producer-perf-test.sh
ISR(in-sync replicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。有延迟条数和延迟时间两个参数决定一台服务是否可以加入ISR副本队列。任意一个维度超过阈值,都会把Follower剔除出ISR,存入OSR列表,新加入的Follower也会先存放在OSR中。
ACK=0,相当于异步发送,消息发送完毕即offset增加,继续生产。(如果生产者发送的消息在传输过程中发生了错误或丢失,则可能会丢失数据。)
ACK=1,leader收到leader replica(副本)对一个消息的接受ack才增加offset,然后继续生产。(如果leader replica失败并且消息还没有复制到其他副本,可能会导致数据丢失。)
ACK=-1,leader收到所有replica对一个消息的接受ack才增加offset,然后继续生产。(只有当所有副本都收到消息并确认后,才能确保数据不会丢失)
幂等性+ack=-1+事务
Kafka 数据重复,可以在下一级:SparkStreaming、redis 或者Hive中dwd层去重
去重手段:分组、按照id开窗只取第一个值。
1)如果kafka消费能力不足,可以考虑增加topic的分区数,同时提升消费组的消费者数量,消费者数=分区数。
2)如果是下游的数据处理不及时,提高每批次拉取的数量。批次拉取数据过少(拉取数据、处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据挤压。
1)Kafka本身是分布式集群,同时采用分区技术,并发度高。
2)顺序写磁盘
kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,顺序写。有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。
3)零复制技术
减少数据在内存和网络之间的复制操作,从而提高系统的性能和效率。在传统的数据传输过程中,数据通常需要经过多次复制,例如从磁盘读取到内存,再从内存复制到网络缓冲区,最后从网络缓冲区复制到传输目的地的内存中。这些复制操作会消耗大量的 CPU 资源和内存带宽,降低系统的性能。
具体而言,它通过以下方式实现零复制:
通过这些优化,Kafka 可以在消息的生产和消费过程中实现零拷贝,减少了不必要的数据复制操作,降低了系统的负载,提高了数据传输的效率和性能。这对于 Kafka 这样的高吞吐量、低延迟的消息传递系统来说尤为重要。
首先保证没有人消费他
日志清理保存的策略只有delete和compact两种
log.cleanup.policy = delete 启用删除策略
log.cleanup.policy = compact 启用压缩策略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。