1,kafka架构
1)producer:生产者,生产消息发送到broker。
2)consumer:消费者,从broker上读取消息。
3)topic:主题,相当于一个队列。
4)consumer group:消费者组。这是kafka用来实现对topic消息的广播和单播的手段。如果想把消息广播给每一个消费者,则一个消费者一个组;如果想把消息给一个消费者消费,则所有消费者为一个组。
5)broker:部署kafka集群的一台机器就是一个broker。
6)partition:分区,一个topic可以有很多个分区,设置多分区,可以提高消费数据的性能。
7)offset:偏移量,消息消费的位置。
2,kafka的压力测试
在我们部署好kafka后,需要做压力测试,可以观察到瓶颈在什么地方,是cup还是内存还是io,一般情况下都是io。
3,kafka部署的机器数量规划
数量=2*(巅峰的生产速度*副本数/100)+1
如果峰值为 50M/s , 副本数为 2 ,则设置3台机器即可。
4,kafka日志保留时长
一般为7天。
5,kafka的磁盘大小
每天数据量*7/70%
生产环境上,每天数据量100G,那么就需要1T大小的磁盘。
6,kafka监控
可以使用KafkaManager、kafkaMonitor,也可以自己开发监控程序。
7,kafka分区数
原则:一个topic的分区数不应大于broker的数量。因为kafka的分区数过多,会占用过多的内存(ISR);当分区数大于broker数量,则意味着一个broker上会有多个分区,当broker宕机,对系统的影响越大。
生产环境一般设置3-7个分区即可。
8,kafka副本数
生产环境一般设置为2、3个副本。
9,topic数量
每个日志类型一个topic,也可以对一些日志合并,使用一个topic。
10,kafka会不会丢失数据?
kafka有3中应答方式
ack=0 :消息发送完毕,则offset增加,继续生产消息。
ack=1:消息发送,当leader返回应答后,offset增加。
ack=-1:消息发送后,需要等待leader和follower都返回应答,offset才增加。
11,副本同步策略
ISR,副本同步策略。ISR中包含leader和follower,当leader挂掉,会在ISR队列中选择一个follower作为leader。0.10版本后只有延迟时间参数来决定follower是否加入或者移出ISR。
12,kafka消费分区分配策略
kafka分区分配策略有2种:Range和RoundRobin,默认Range
根据分区数除以消费者线程数,来决定一个消费者消费几个分区,如果除不尽,则前面的消费者多消费一个分区。
比如,7个分区 3个消费者 那么 第一个消费者线程需要消费3个分区,后2个消费者线程各消费2个分区。
13,kafka数据量计算
比如我们的生产环境来说:
每天总数据量100G,1亿条数据,每秒1150条
低估时,每秒50条,高峰1150*(2-20),大约2300~230000条
每条数据大小在0.5k~2k
每秒数据量大小2M~20M之间
14,kafka挂掉了,怎么办?
1)flume有日志,可以重新读取
2)日志有记录
3)短期没有事。
15,kafka消息积压,怎么办?
1)如果是消费能力不足,则考虑增加分区,增加消费者数量,注意:只有分区数=消费者数,才有效果。
2)下游处理能力不足,则考虑增加消费者一次从kafka拉取的数据量。
16,幂等性
对于produer而言,发送同一条消息到server时,只会持久化一次。
17,kafka的事物
在0.11版本,kafka引入了事物,在保证精确一次的语义的基础上,生产者和消费者可以跨分区和会话,要么全部成功,要么全部失败。
1)producer事物
为了实现跨分区和会话的事物,引入了一个全局的TransactionId,producer的pId和TransactionId绑定,当producer重启则可以通过TransactionId找到pid
2)Consumer 事务
上述事务机制主要是从 Producer 方面考虑,对于 Consumer 而言,事务的保证就会相对较弱,尤其时无法保证 Commit 的信息被精确消费。这是由于 Consumer 可以通过 offset 访
问任意信息,而且不同的 Segment File 生命周期不同,同一事务的消息可能会出现重启后被删除的情况
18,kafka数据重复
幂等性+ack-1+事物。
19,kafka参数优化
1)broker参数
网络和io操作线程优化
log 数据文件刷盘策略
日志保留策略
副本策略
buffer.memory:33554432 (32m),合理设置存放生产者消息的缓存
compression.type:none,设置合理的压缩方式
3)kafka内存调整
20,kafka的效率
1)本身为分布式,同时采用分区技术,并发度高
2)顺序写磁盘,顺序写磁盘效率很高
3)零拷贝技术