目录

  • 基本信息
  • 挂了
  • 数据丢失
  • 重复数据
  • 数据积压
  • 优化
  • 其他


基本信息

1.组成

producer brokers  consumer  zookeeper

2.需要安装多少台

2 * (生产者峰值生产速率 * 副本 / 100) + 1 = 3台

3.副本多少

副本2-3个,2个居多
副本的优势:提高可靠性
副本劣势:增加了网络IO传输

4.生产者峰值生产速率 ? 压测

百兆/s     消费速率   百兆/s

5.监控器用的什么?

KafkaManager、KafkaMonitor、KafkaEagle  都是开源
如果面试官问:我们都是自己研发的       仰视大佬

6.kafka数据保存多久

默认保存7天; 生产环境下建议3天

7.数据量

条/s    m/s
日活 100万   1人1天100条  一天多少条日志=100万*100=1亿
1亿/(24*3600s) = 1150条/s 
1条日志1k (0.5-2k) 
大约1m/s
什么时间点数据量最大,能达到多少?
晚上7-10点  =》  20m/s - 30m/s    尽量不要超过50m/s  原因:2 * (n*2/100) + 1 = 3
100万的日活=1亿k=100G

8.给kafka磁盘预留多大空间

100g * 2个副本 * 3天 / 0.7    zabbix监控资源情况

9.设置多少个分区

3-10个
(1)设置1个分区
(2)压测:生产者峰值产生速率tp,消费者峰值生产速率tc
(3)有个预期的吞吐量t
(4)分区数=t /min(tp,tc)
假如:tp = 20m/s   tc = 50m/s  t = 100m/s
分区数=100/s / 20 = 5个
分区数影响了并发度

10.isr

解决leader挂了谁当老大;谁在isr队列,就有机会
旧版:延迟时间,延迟条数;  新版:延迟时间

11.分区分配策略

1.Range(默认)
10个线程   3个分区
1    2   3   4
5    6   7
8    9   10
容易产生数据倾斜
2.RoundRobin
hash 随机打散,再采用轮询,尽量减少数据倾斜

挂了

短时间数据进入到flume channel
长时间有日志服务器(springboot)30天数据

数据丢失

1.ack

0   发送过去就不管了,      可靠性最差   传输效率最高
1   发送过去,leader应答;  可靠性一般   传输效率一般
-1  发送过去leader和follower,共同应答;可靠性最高,传输速率最低

2.在生产环境下怎么选择?

0是没人选的。
如果是普通日志,通常会选择1
如果是金融和钱相关的,通长选择-1   上海用-1比较多

重复数据

1.不处理
2.处理
幂等性(单分区,单会话)+事务(控制多分区)+ack=-1
下一级处理
hive dwd   sparkstreaming (groupby,开窗取窗口第一条,redis)
精确一次性消费

数据积压

自身:增加分区   消费者也要增加消费线程(sparkstreaming CPU核数)
      5个分区    CPU核数5个
      128m      1g内存
找兄弟:提高下一级消费者的消费能力   batchsize(1000/s => 2000-3000)

优化

  • Broker参数配置(server.properties)
    1、网络和io操作线程配置优化
8个处理器=8个CPU核数
broker处理消息的最大线程数(默认为3)
num.network.threads=cpu核数+1
broker处理磁盘IO的线程数 
num.io.threads=cpu核数*2

2、log数据文件刷盘策略

每当producer写入10000条消息时,刷数据到磁盘 
log.flush.interval.messages=10000
每间隔1秒钟时间,刷数据到磁盘
log.flush.interval.ms=1000

3、日志保留策略配置

保留三天,也可以更短 (log.cleaner.delete.retention.ms)
log.retention.hours=72

4、Replica相关配置

offsets.topic.replication.factor:3
这个参数指新创建一个topic时,默认的Replica数量,Replica过少会影响数据的可用性,太多则会白白浪费存储资源,一般建议在2~3为宜。

buffer.memory:33554432 (32m)
#在Producer端用来存放尚未发送出去的Message的缓冲区大小。缓冲区满了之后可以选择阻塞发送或抛出异常,由block.on.buffer.full的配置来决定
compression.type:none
压缩优势:减少磁盘空间,提高网络传输效率;   劣势:频繁计算场景,就不要采用
#默认发送不进行压缩,推荐配置一种适合的压缩算法,可以大幅度的减缓网络压力和Broker的存储压力。

默认内存1个G,生产环境kafka内存调到4-6g,不要超过6g,如果6G还是不行,增加kafka台数
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

其他

1.为什么kafka传输效率快

分布式集群  采用分区
顺序读写 600m/s   随机读写 100/s
0拷贝技术   压缩

kafka 每次获取一条消息 kafka每次取多少数据_大数据


2.如果传输日志文件2m,会有什么问题?

kafka不能生产,也不能消费
kafka对于消息体的大小默认为单条最大值是1M
我们就要对kafka进行以下配置:server.properties

kafka 每次获取一条消息 kafka每次取多少数据_生产环境_02


3.Kafka过期数据清理

保证数据没有被引用(没人消费他)
日志清理保存的策略只有delete和compact两种
log.cleanup.policy=delete启用删除策略
log.cleanup.policy=compact启用压缩策略

4.Kafka可以按照时间消费数据
使用API

Map<TopicPartition, OffsetAndTimestamp> startOffsetMap = 
KafkaUtil.fetchOffsetsWithTimestamp(topic, sTime, kafkaProp);

5.Zookeeper中存储kafka哪些信息

kafka 每次获取一条消息 kafka每次取多少数据_大数据_03