答: 答: Producer :消息生产者,就是向kafka broker发消息的客户端; Consumer :消息消费者,向kafka broker取消息的客户端; Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。 Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。 Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic; Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列; Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。 leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。 follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。 在 Kafka 中,生产者写入消息、消费者读取消息的操作都是与 leader 副本进行交互的,从 而实现的是一种主写主读的生产消费模型。 Kafka 并不支持主写从读,因为主写从读有两个很明显的缺点: 数据一致性问题。数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间 窗口会导致主从节点之间的数据不一致。某一时刻,在主节点和从节点中 A 数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个变更通知到从节点之前,应用读取从节点中的 A 数据的值并不为最新的 Y,由此便产生了数据不一致的问题。 延时问题。类似 Redis 这种组件,数据从写入主节点到同步至从节点中的过程需要经 历网络→主节点内存→网络→从节点内存这几个阶段,整个过程会耗费一定的时间。而在 Kafka 中,主从同步会比 Redis 更加耗时,它需要经历网络→主节点内存→主节点磁盘→网络→从节 点内存→从节点磁盘这几个阶段。对延时敏感的应用而言,主写从读的功能并不太适用。 Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为O(1)。时间轮的应用并非Kafka独有,其应用场景还有很多,在Netty、Akka、Quartz、Zookeeper等组件中都存在时间轮的踪影。 底层使用数组实现,数组中的每个元素可以存放一个TimerTaskList对象。TimerTaskList是一个环形双向链表,在其中的链表项TimerTaskEntry中封装了真正的定时任务TimerTask. Kafka中到底是怎么推进时间的呢?Kafka中的定时器借助了JDK中的DelayQueue来协助推进时间轮。具体做法是对于每个使用到的TimerTaskList都会加入到DelayQueue中。Kafka中的TimingWheel专门用来执行插入和删除TimerTaskEntry的操作,而DelayQueue专门负责时间推进的任务。再试想一下,DelayQueue中的第一个超时任务列表的expiration为200ms,第二个超时任务为840ms,这里获取DelayQueue的队头只需要O(1)的时间复杂度。如果采用每秒定时推进,那么获取到第一个超时的任务列表时执行的200次推进中有199次属于“空推进”,而获取到第二个超时任务时有需要执行639次“空推进”,这样会无故空耗机器的性能资源,这里采用DelayQueue来辅助以少量空间换时间,从而做到了“精准推进”。Kafka中的定时器真可谓是“知人善用”,用TimingWheel做最擅长的任务添加和删除操作,而用DelayQueue做最擅长的时间推进工作,相辅相成。面试问题
1.Kafka中的ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么?
2. Kafka中的HW(High Watermark)、LEO(Log End Offset)等分别代表什么?
3. Kafka是怎么体现消息顺序性的?
4. Kafka中的分区器、序列化器、拦截器是否了解?他们之间的处理顺序是什么?
5. Kafka生产者客户端的整体结构怎样的?使用了几个线程来处理?分别是什么?
6. “消费者中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话正确吗?为什么?
7. 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
8. 有哪些情形会造成重复消费?
9. 有哪些情形会造成消息漏消费?
10. 当使用kafka-topics.sh创建(删除)一个topic之后,kafka背后会执行什么操作?
11. topic的分区数可不可以增加?
bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-config --partitions 3
12. topic的分区数可不可以减少?
13. Kafka有内部的topic吗?如果有,是什么?有什么用?
14. Kafka分区分配的概念?
15. 简述Kafka的日志目录结构?
follower被选为leader时会根据这个确定哪些消息可用16. 如果指定一个offset,Kafka Controller怎么查找到对应的消息?
如图:
17. 聊一聊Kafka Controller的作用?
18. Kafka中有些地方需要选举?这些地方的选举策略又有那些?
19. 失效副本是指什么?有什么应对措施?
20. Kafka的那些设计让它有如此高的性能?
21. kafka基础架构
22. 如果leader故障时,ISR为空怎么办
23. kafka的message格式是什么样的
24. kafka中consumer group 是什么概念
25. 为什么Kafka不支持读写分离?
26. kafka如何实现延迟队列?
Kafka解惑之时间轮(TimingWheel)
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算