kafka基本概念

一、简介

kafka是一个分布式流处理平台,是由Scala编写具有高水平扩展和高吞吐量的分布式消息系统。kafka对消息保存时根据topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。

二、kafka两种消息模型

1.点对点模型(一对一,消费者主动拉取数据,消息收到后消息清除):点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求消息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者处理,即使有多个消息监听者也是如此。

2.发布/订阅模式(一对多,数据生产后,推送给所有订阅者):发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息即使当前订阅者不可用,处于离线状态。

三、kafka组件的概念

kafka服务器(Broker):kafka的服务器端被称为Broker的腹部进程构成,即一个kafka集群是由多个Broker组成,Broker负责接收和处理客户端发送过来的请求,以及对消息进行持久化。

生产者(Producers):生产者往某个topic上发布消息,生产者也负责选择发布到topic上的哪一个分区。最简单的方式是从分区列表中进行轮询选择,也可以根据某种算法依照权重选择分区,开发者负责如何选择分区算法。

消费者(Consumers):消息消费者,向kafka取消息的客户端

消费者组(Consumer Group):消费者使用一个消费组名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例。消费者实例可以分布在多个进程中或者多个机器上。即使不指定消费组,会分配一个默认的消费组。

  • 如果所有的消费者实例在同一个消费组中,消息记录会负载平衡到每一个消费者实例。

  • 如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程。

对于第一种描述,当C1,C2在同一个组中,取消费P0时,那么消费会平衡的发送给C1,C2,也就是C1一条,C2一条,一人一条;对于第二种描述,当C1,C3处于不同的消费者组,取消费P0时,P0中的消息会同时发送给C1,C3。 

主题(Topics):是数据记录发布的地方,可以用来区分业务系统。kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。

分区(Partition):可以将一个主题分为多个分区(partition),每个partition是一组有序的消息日志,生产者产生的消息只会发送到topic中的某一个分区。分区机制解决了kafka的扩展性问题。

偏移量(Offset):kafka的存储文件都是按照offset.kafka来命名的,用offset做名字的好处是方便查找。例如想查找位于2049的位置,只要找到2048.kafka(是从0来时命名的)的文件即可。

备份机制(Replication):partition被分布部署到多个服务器上,每个处理器处理自己的分区,然后根据配置每个分区还可以复制到其它服务器作为备份容错。每个分区有一个leader,零或多个follower。Leader处理此分区的所有读写请求,而follower被动的复制数据。如果leader宕机,其它的一个follower会被推举为新的leader。备份机制保证了kafka的持久化和消息不丢失问题。遵循的策略如下:

  • 同一个partition的多个replication不允许在同一个broker上。

  • 每个partition的replication中,有一个leader,零或多个follower。

  • leader处理此分区对的所有的读写请求,follower仅仅是用来做备份数据的。

  • leader宕机后,会从follower中选举出新的leader。

对于上述的基本描述,kafka可分为三层消息架构:

  • 第一层是主题层,每个主题可以有多个分区,每个分区又有多个副本文件。

  • 第二层是分区层,每个分区的多个副本中,有且只能有一个是领导者,对外提供服务;其他追随者副本,只是用来提供数据冗余备份使用。

  • 第三层是消息层,分区中包含多个消息,每条消息的位移从0开始,依次递增。

欢迎关注本人公众号,一起讨论学习

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值