Kafka-interview-questions

Kafka架构

Kafka-interview-questions_第1张图片
Kafka架构图示

Kafka压测

  Kafka官方自带压力测试脚本(kafka-consumer-perf-test.shkafka-producer-perf-test.sh)。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈;


Kafka的机器数量

Kafka机器数量 = 2 *( 峰值生产速度 * 副本数 / 100+ 1;


Kafka的日志保存时间

 默认保存7天;


Kafka的硬盘大小

 每天的数据量 * 7


Kafka监控

 1️⃣公司自己开发的监控器;
 2️⃣开源的监控器 : KafkaManagerKafkaMonitor;


Kakfa分区数

  分区数并不是越多越好,一般分区数不要超过集群机器数量。分区数越多占用内存越大(ISR等),一个节点集中的分区也就越多,当它宕机的时候,对系统的影响也就越大。
分区数一般设置为:3-10


八 副本数设定

 一般我们设置成2个或3个,很多企业设置为2;


Kafka有多少个Topic

 通常情况 : 多少个日志类型就有多少个Topic,也有对日志类型进行合并的;


Kafka丢不丢数据

Ack=0 : 相当于异步发送,消息发送完毕即offset增加继续生产;
Ack=1 : leader收到leader replica对一个消息的接受ack才增加offset然后继续生产;
Ack=-1 : leader收到所有replica对一个消息的接受ack才增加offset然后继续生产;


十一 KafkaISR副本同步队列

  ISR(In-Sync Replicas) : 副本同步队列。ISR中包括LeaderFollower;如果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中;


十二 Kafka分区分配策略

1️⃣ 在Kafka内部存在两种默认的分区分配策略 :RangeRoundRobin;
2️⃣ Range是默认策略 : Range是对每个Topic而言的(即一个Topic一个Topic分);首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字典顺序进行排序;然后用Partitions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区;如果除不尽那么前面几个消费者线程将会多消费一个分区;
3️⃣ 例如 : 10个分区两个消费者( C1 , C2 ),3个消费者线程,10 / 3 = 3而且除不尽;
C1-0将消费0, 1, 2, 3分区;
C2-0将消费4, 5, 6分区;
C2-1将消费7, 8, 9分区;
4️⃣ RoundRobin : (前提是同一个Consumer Group里面的所有消费者的num.streams(消费者消费线程数)必须相等;每个消费者订阅的主题必须相同;
 第一步 : 将所有主题分区组成TopicAndPartition列表;
 第二步 : 对TopicAndPartition列表按照hashCode进行排序;
 第三步 : 按照轮询的方式发给每一个消费线程;


十三 Kafka中数据量计算

1️⃣ 每天总数据量100G;
2️⃣ 每天产生1亿条日志;
3️⃣ 10000/ 24 / 60 / 60 = 1150 条/每秒钟;
4️⃣ 平均每秒钟 : 1150条;
5️⃣ 低谷每秒钟 : 400条;
6️⃣ 高峰每秒钟 : 1150* ( 2 - 20) = 2300- 23000 条;
7️⃣ 每条日志大小 : 0.5k - 2k;
8️⃣ 每秒多少数据量 : 2.3M - 20MB


十四 Kafka宕机有什么影响

1️⃣ 短期没有问题;
2️⃣ Flume会有消息消费记录;
3️⃣ Kafka日志也会有记录;
4️⃣ 重启以后会继续消费;


十五 Kafka消息数据积压,Kafka消费能力不足怎么处理

1️⃣ 如果是Kafka消费能力不足 : 可以考虑增加Topic的分区数并且同时提升消费组的消费者数量建议设置消费者数 = 分区数(两者缺一不可);
2️⃣ 如果是下游的数据处理不及时 : 提高每批次拉取的数量;批次拉取数据过少(拉取数据 / 处理时间 < 生产速度)使处理的数据小于生产的数据也会造成数据积压;

你可能感兴趣的:(Kafka-interview-questions)