1.kafka组成
kafka架构由服务集群broker、生产者producer、消费者组成。
broker:
broker依靠zookeeper实现服务的注册与发现;接收producer发送的数据;实现消息文件的存储与备份;维护消费者consumer的已消费位置offset记录(0.10.1.X版本之前保存在zk中);协调消费者的负载均衡。
producer:
producer直接将数据发送到broker;可以配置异步、同步、批量等发送策略。
consumer:
每个consumer有唯一的consumerId,根据分组策略读取消息;读取记录可以配置自动提交、手动提交、批量读取等策略。
2.消息划分维度
log_anatomy.pngkafka消息按topic分组,每个topic一个文件文件目录分开存储,消费者也是按照topic进行消费;topic下面又按partition进行分区。topic可以拥有1个或多个partition,每个partition在topic目录下也是有单独目录存储,且分区内有序,partition之间无序。
3.producer写消息
producer写消息时,需要明确给出写到哪个topic,可以给定选取partition的key,此时按给定key的hashcode对分区数取余选择分区,若指定partitionkey则采用默认的分区选取方法。producer比较开放,只要链接到broker均可发送消息。
4.consumer消费消息
consumer-groups.png每个consumer属于一个消费者组consumergroup,一个consumergroup内的consumer按照partition平均消费数据。若consumergroup内的consumer数量大于partition数量,多出的consumer将没有数据可消费。这样保证了每个分区都有唯一的consumer,方便消费记录的维护。
当一个consumer退出或加入consumergroup时,broker将重新分配每个consumer对应的partition,维持consumer的负载均衡。
网友评论