4.5 Kafka相关总结
- 4.5.1 Kafka架构
- 4.5.2 Kafka压测
- 4.5.3 Kafka的机器数量
- 4.5.4 Kafka的日志保存时间
- 4.5.5 Kafka的硬盘大小
- 4.5.6 Kafka监控
- 4.5.7 Kakfa分区数
- 4.5.8 副本数设定
- 4.5.9 多少个Topic
- 4.5.10 Kafka丢不丢数据
- 4.5.11 Kafka的ISR副本同步队列
- 4.5.12 Kafka分区分配策略
- 4.5.13 Kafka中数据量计算
- 4.5.14 Kafka挂掉
- 4.5.15 Kafka消息数据积压,Kafka消费能力不足怎么处理?
4.5.1 Kafka架构
4.5.2 Kafka压测
Kafka官方自带压力测试脚本(kafka-consumer-perf-test.sh、kafka-producer-perf-test.sh)。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈。
4.5.3 Kafka的机器数量
Kafka机器数量=2*(峰值生产速度*副本数/100)+1
4.5.4 Kafka的日志保存时间
7天
4.5.5 Kafka的硬盘大小
每天的数据量*7天
4.5.6 Kafka监控
公司自己开发的监控器;
开源的监控器:KafkaManager、KafkaMonitor
4.5.7 Kakfa分区数
分区数并不是越多越好,一般分区数不要超过集群机器数量。分区数越多占用内存越大(ISR等),一个节点集中的分区也就越多,当它宕机的时候,对系统的影响也就越大。
分区数一般设置为:3-10个
4.5.8 副本数设定
一般我们设置成2个或3个,很多企业设置为2个。
4.5.9 多少个Topic
通常情况:多少个日志类型就多少个Topic。也有对日志类型进行合并的。
4.5.10 Kafka丢不丢数据
Ack=0,相当于异步发送,消息发送完毕即offset增加,继续生产。
Ack=1,leader收到leader replica 对一个消息的接受ack才增加offset,然后继续生产。
Ack=-1,leader收到所有replica 对一个消息的接受ack才增加offset,然后继续生产。
4.5.11 Kafka的ISR副本同步队列
ISR(In-Sync Replicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。有replica.lag.max.messages(延迟条数)和replica.lag.time.max.ms(延迟时间)两个参数决定一台服务是否可以加入ISR副本队列,在0.10版本移除了replica.lag.max.messages参数,防止服务频繁的进去队列。
任意一个维度超过阈值都会把Follower剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的Follower也会先存放在OSR中。
4.5.12 Kafka分区分配策略
在 Kafka内部存在两种默认的分区分配策略:Range和 RoundRobin。
Range是默认策略。Range是对每个Topic而言的(即一个Topic一个Topic分),首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。然后用Partitions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。
例如:我们有10个分区,两个消费者(C1,C2),3个消费者线程,10 / 3 = 3而且除不尽。
C1-0 将消费 0, 1, 2, 3 分区
C2-0 将消费 4, 5, 6 分区
C2-1 将消费 7, 8, 9 分区
RoundRobin:前提:同一个Consumer Group里面的所有消费者的num.streams(消费者消费线程数)必须相等;每个消费者订阅的主题必须相同。
第一步:将所有主题分区组成TopicAndPartition列表,然后对TopicAndPartition列表按照hashCode进行排序,最后按照轮询的方式发给每一个消费线程。
4.5.13 Kafka中数据量计算
每天总数据量100g,每天产生1亿条日志, 10000万/24/60/60=1150条/每秒钟
平均每秒钟:1150条
低谷每秒钟:400条
高峰每秒钟:1150条*(2-20倍)=2300条-23000条
每条日志大小:0.5k-2k
每秒多少数据量:2.3M-20MB
4.5.14 Kafka挂掉
1)Flume记录
2)日志有记录
3)短期没事
4.5.15 Kafka消息数据积压,Kafka消费能力不足怎么处理?
1)如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数=分区数。(两者缺一不可)
2)如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压。
—— 温故而知新,可以为师矣。