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)零拷贝技术