五、Kafka (23件事)
1、基本信息
1)组成
2)安装多少台 2*(生产者峰值生产速率副本、100)+1 = 3
3)压测:生产者峰值生产速率
4)副本:默认1;2 -3个副本
副本越多:可靠性越高、增加了磁盘IO,效率低下
5)数据量问题
100万日活 每个人100条 100万*100=1亿
1条日志:0.5k - 2k => 1k
平均速度:1亿/(243600s) = 1150条/s
1150条*1k/s = 1m/s
峰值速度:1150条/s * 20s = 2万条 20m/s
6)Kafka里面数据保存多久
默认:7天 =》 3天
7)磁盘预留多大
100g*2副本*3天/0.7=
8)Kafka做不做监控?
kafka manager kafkaEagle 开源
9)分区:
先设置一个分区:生产者峰值生产速率tp、消费者消费的峰值速率tc
自己要有一个Kafka吞吐量的预期t
分区数 = t / min(tp,tc)
t = 100m/s tp = 40 m/s tc = 50m/s
100/40 = 2.5 = 3个分区
3-10个分区
10)分区分配策略
Range (默认)
RoundRobin 全部hash随机打散,再轮询
11)ISR
主要解决leader挂了,谁当老大;在ISR队列里面的都有机会。
旧版本:延迟时间、延迟条数
新版本:延迟时间
2、Kafka宕机
短时间 会存储在flume channel里面
长时间 日志服务器保存30天数据
3、Kafka消息丢失
生产者机制:ack
0 发送过来就不管了 可靠性最差,传输效率最高
1 leader应答 可靠性一般 传输效率一般
-1 leader+follower共同应答;可靠性最高;传输效率最低
在生产环境:
0 肯定不送
1 一般传输的是普通的日志,对可靠性要求不是特别高。
-1 传输的是钱相关的,或者金融企业,对可靠性要求高。
4、Kafka消息重复
自身:幂等性、事务、ack = -1 用的比较少; 更追求效率
找兄弟:hive的DWD、sparkstreaming、redis 用的比较多
5、Kafka消息积压
1)增加分区 同时增加下一级消费者的CPU核数
2)增加下一级消费者消费速度
flume sparkstreaming batchsize 1000event/s => 2000event/s
3)增加Kafka台数或磁盘
6、Kafka优化
7、Kafka杂七杂八
1)Kafka高效读写数据(页缓存技术)
Kafka本身就是集群、可以设置分区
2)采用顺序读写
3)采用零拷贝技术