标签: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消费一次。
标签:ima 默认 包括 height 严格 sub 自己 kafka集群 inf
原文地址:https://www.cnblogs.com/zy-sai/p/9349732.html