1.为什么kafka可以实现高吞吐?单节点kafka的吞吐量也比其他的消息队列大,为什么?
(1)零拷贝
(2)顺序日志
(3)预读
(4)后写:放到磁盘缓存,到达一定值的时候,操作系统一次性写入很多数据
(5)分段日志:
(6)批处理:双端队列
(7)压缩:byte数组
2.kafka的偏移量offset存放在哪?
- 早些时放zookeeper,zk是做调度用的,如果经常更新偏移量会影响性能
- 0.9版本后放岛kafka cluster(zookeeper 会生成一个topic:_consumer_offset)
- 自定义:避免数据重复,可以禁止自动提交,可以放岛mysql中,或者redis中
3.kafka用什么方式消费数据,拉还是推?
(1)poll(速率问题),如果是推的方式,有可能消费端承载不了,如果网络阻塞,服务就可能中断了,用拉的方式可以均衡速率
4.如何保证数据不会出现丢失或者重复消费的情况?
(1)同步
(2)ACK -1或者All
(3)自己维护offset避免重复消费(低级API)
5.Kafka的元数据存在哪?
(1)ZK中(包含 /controller,/cluster,/consumer,/broker)
6.为什么使用kafka,可不可以用flume直接将数据放在hdfs上
(1)Flume只是传输框架,不能存储
(2)Flume丢失数据
(3)消费者出来比较麻烦
7.kafka如何保证不同的订阅源都收到相同的一份内容
(1)HW高水位
(2)LEO
8.kafka中的leader的选举机制
(1)先选broker,然后从ISR中选leader
https://blog.csdn.net/qq_37142346/article/details/91349100
9.kafka的运行机制
10.提高kafka的消费速度(吞吐量优化)
(1)增加分区与消费者
(2)增加拉取数据的大小
(3)增大批处理的大小
11.kafka的分区数据有有序性?分区数据存放的算法?分区的好处?
12.ISR中什么情况下brokerId会消失
(1)副本down掉
(2)网络阻塞
(3)数据落后太多Lag ,leader会从ISR中移除这个follower
标题 13.flume和kafka有序吗
(1)flume有序(Queue)
(2)kafka同一个分区有序,不保证不同分区有序
14.kafka的offset,flume的组成,项目中为什么用了两层?
15.kafka消费的高级API,低级API?
16.怎么手动维护offset?
(1)关闭自动提交
(2)调用方法Consumer.commitSync()
(3)保存offset到mysql或者redis中