问题来自“朱小厮的博客”的Kafka面试题全套整理 | 划重点要考!
朱小厮给出了问题,下面是我对这些问题解答。
文章目录
-
- Kafka的用途有哪些?使用场景如何?
- Kafka作为消息队列,它可解决什么样的问题?
- Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么
- Kafka中的HW、LEO、LSO、LW等分别代表什么?
- Kafka中是怎么体现消息顺序性的?
- Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
- Kafka生产者客户端中使用了几个线程来处理?分别是什么?
- Kafka生产者客户端的整体结构是什么样子的?
- Kafka的旧版Scala的消费者客户端的设计有什么缺陷?
- 元数据是指什么?
- “消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?如果不正确,那么有没有什么hack的手段?
- 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
- 生产者问题
- 消费者问题
- 有哪些情形会造成重复消费?
- 那些情景下会造成消息漏消费?
- KafkaConsumer是非线程安全的,那么怎么样实现多线程消费?
Kafka的用途有哪些?使用场景如何?
Kafka的优势如下:
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
可扩展性:kafka集群支持热扩展;
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障);
高并发:支持数千个客户端同时读写。
Kafka的劣势如下:
无法弹性扩容:对partition的读写都在partition leader所在的broker,如果该broker压力过大,也无法通过新增broker来解决问题;
扩容成本高:集群中新增的broker只会处理新topic,如果要分担老topic-partition的压力,需要手动迁移partition,这时会占用大量集群带宽;
消费者新加入和退出会造成整个消费组rebalance:导致数据重复消费,影响消费速度,增加e2e延迟;
partition过多会使得性能显著下降