码迷,mamicode.com
首页 > 其他好文 > 详细

kafka生产、存储、消费消息

时间:2018-07-22 14:03:53      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:ima   默认   包括   height   严格   sub   自己   kafka集群   inf   

技术分享图片

Kafka架构组成:
由producer(消息生产者)、
consumer(消息消费者)、
borker(kafka集群的server,负责处理消息读、写请求,存储消息,在kafka cluster这一层这里,其实里面是有很多个broker)、
topic(消息队列/分类相当于队列,里面有生产者和消费者模型)、
zookeeper(元数据信息存在zookeeper中,包括:存储消费偏移量,topic话题信息,partition信息) 这些部分组成。

kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为很多个partition(真实存数据的地方,可以理解成一个文件,有多少个partition是可以指定的),这个是为了做并行的,
在每个partition内部消息强有序(在一个partition内是严格的先进先出的原则,但是在一个topic中不是严格FIFO,把一个topic设成一个partition就是严格FIFo),相当于有序的队列,其中每个消息都有个序号offset,比如0到12,从前面读往后面写。一个partition对应一个broker,一个broker可以管多个partition,比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。这个partition可以很简单想象为一个文件,当数据发过来的时候它就往这个partition上面append,追加就行,消息不经过内存缓冲,直接写入文件,
kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除(默认保存一周),在kafka里面没有一个消费完这么个概念,只有过期这样一个概念。
producer自己决定往哪个partition里面去写,这里有一些的策略,譬如如果hash(易产生数据倾斜)或者轮询(负载均衡),不用多个partition之间去join数据了。
consumer自己维护消费到哪个offset(即:自己去zookeeper中更新数据),
每个consumer都有对应的group,group内是queue消费模型(各个consumer消费不同的partition,因此一个消息在group内只消费一次,组内:一个consumer一次只能连接一个partition,不能再有其他consumer连接partition),
group间是publish-subscribe消费模型,各个group各自独立消费,互不影响,因此一个消息在被每个group消费一次。

技术分享图片技术分享图片

kafka生产、存储、消费消息

标签:ima   默认   包括   height   严格   sub   自己   kafka集群   inf   

原文地址:https://www.cnblogs.com/zy-sai/p/9349732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!