问题来自“朱小厮的博客”的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过多会使得性能显著下降:ZK压力大,broker上partition过多让磁盘顺序写几乎退化成随机写。
原文链接:https://blog.csdn.net/zjjcchina/article/details/122359951
Kafka的使用场景:
1、日志的收集:
kafka的特性决定它非常适合作为"日志收集中心";application可以将操作日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能的开支.此时consumer端可以使hadoop等其他系统化的存储和分析系统。
2、消息系统
解耦生产者和消费者、缓存消息等;
3、用户的活动跟踪
kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库;
3、 运营指标
kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
4、 流式处理
比如spark streaming和storm。
原文链接:https://blog.csdn.net/weixin_42324471/article/details/121908717
原文链接:https://blog.csdn.net/weixin_44787000/article/details/106668642
Kafka作为消息队列,它可解决什么样的问题?
kafka是一个分布式的基于发布/订阅模式的消息队列
消息队列 = 消息 + 队列
消息 : 说白了就是数据(请求数据、业务数据等等)
队列 : 就是队列(数据结构中线性表或链表实现的先入先出的队列)
消息队列就是存放数据的队列
缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。
解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
异步通信:在复杂的调用链中,总是会出现前面的系统等待后面的系统的结果,这是由于各系统间的处理信息的速度不一致导致。
如果使用Kafka,就可以做到发送消息给kafka后就返回消息给用户,然后后面的系统异步的去处理。
原文链接:https://blog.csdn.net/qq_36721495/article/details/117130590
Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么
分区中的所有副本统称为AR(Assigned Repllicas)。所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas),由此可见:AR=ISR+OSR。
ISR的伸缩:
leader副本负责维护和跟踪 ISR 集合中所有follower副本的滞后状态,当follower副本落后太多或失效时,leader副本会把它从