内容简介: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核心概念》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Text Processing in Python
David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99
Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!