内容简介:JMS:Java对于应用程序之间进行异步交互信息的API.P2P一对一消息传递,消费者需要主动从队列中获取,消息不会自动推送,且消息被消费后就会从队列中删除,所以不会有重复消费的场景。
JMS:Java对于应用程序之间进行异步交互信息的API. 两种模式:
- Point-to-Point(P2P)(点对点)
P2P一对一消息传递,消费者需要主动从队列中获取,消息不会自动推送,且消息被消费后就会从队列中删除,所以不会有重复消费的场景。
- Publish/Subscribe(发布订阅)
Pub/Sub消息组播场景。发布订阅模式可以有多种不同的订阅者,消息推送到各个订阅者,临时订阅者只在主动监听才接受消息,而持久订阅者则监听主题的所有消息。
Kafka提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
二、Kafka拓扑结构
三、Kafka核心概念
Broker
Broker是Kafka集群的实例或者说服务单元。Broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。Broker为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。多个Broker构成Kafka集群,其中一个Broker会成为集群控制器(cluster controller)即leader,负责管理集群,包括分配分区到broker、监控broker故障等。leader宕机也会进行选举,保证集群高可用。一般Broker分布在不同机器上。
Producer
生产者,创建消息,默认情况下Kafka会将消息均衡分配到所有的分区。可以根据消息的key,使用路由策略,将相同key值的消息写入同一个分区。
Consumer
消费者,可以订阅一个或多个主题。在读取时,消费者会记录当前已经读取的消息位移(offset),一般将该位移称为消费位移。
Consumer Group
Kafka利用消费组进行并行消费,相同Group的consumer不会重复消费,它们之间互不影响。Kafka保证每个分区只会被同一个Group里面的一个Consumer所消费。
Topic
主题,Kafka的消息以主题来进行分类,主题类似数据库中的表。Producer向主题里面丢消息,Consumer从主题拉取消息,形成发布订阅。
Partiton
分区。消息存在主题的队列中,分区就是将主题队列分成小队列,每个小队列都是一个有序不变的消息序列。每个partition在存储层面是append log文件,任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量)或,offset为一个long型数字,它是唯一标记一条消息。分区的存在大大提升Kafka的吞吐量。
Replication
副本,Kafka的消息存放在副本中,副本分为leader和follower,可以在配置中指定副本数量,副本存放在不同的Broker进程中,每个分区可配置多个副本实现高可用
上图中:
3个Broker服务:Broker0,Broker1,Broker2
3个分区:partition0,partition1,partition2
2个副本:一个leader,一个follwer
同一个分区的不同副本放在不同的Broker上,同时每个分区的主副本均匀分布。
四、Kafka相关知识点:
1. Kafka没有做读写分离,消息的读写都在分区的leader Replica上完成,follower Replica只是作为数据冗余。
没做读写分离的原因:1)Kafka中使用分区和副本,分区的leader副本均匀分布在不同的Broker上,这本身已经对流量做了负载,没必要再做读写分离。
2)Kafka中保存的是流数据,需要Offset,而数据库中的数据是静态的,如果对follower也进行读的话,可能会让系统变得更复杂。个人感觉后续版本也可以提供这个功能。
2. Kafka只保证分区下的消息有序,不能保证Topic下的消息有序
3. Partition和Consumer Group关系:
- 一个partition只能被同组的同一个consumer消费
- 同一组的一个Consumer可以消费不同的Partition
- 消费效率最高的情况是partition和consumer数量相同
- Consumer数量大于Partition数量时,会有Consumer闲置
3. Kafka基础概念总结图
注:本文图片均来自网上资料收集
以上所述就是小编给大家介绍的《面试必懂的Kafka核心概念》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 62 道 Java 核心面试题,这次全了
- 精选前端核心面试题及解答(基础篇)
- 31 道 Java 核心面试题,一次性打包送给你
- 手写 Webpack 核心原理,再也不怕面试官问我 Webpack 原理
- CSS核心技术详解-核心概念
- WTC测评:核心团队从业经验,核心代码尚未开源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
学习JavaScript数据结构与算法
[巴西] 格罗纳(Loiane Groner) / 孙晓博、邓钢、吴双、陈迪、袁源 / 人民邮电出版社 / 2015-10-1 / 39.00
本书首先介绍了JavaScript语言的基础知识,接下来讨论了数组、栈、队列、链表、集合、字典、散列表、树、图等数据结构,之后探讨了各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、顺序搜索、二分搜索,还介绍了动态规划和贪心算法等常用的高级算法及相关知识。一起来看看 《学习JavaScript数据结构与算法》 这本书的介绍吧!