使用kafka之前要知道的概念

Kafka基本概念

Kafka是一个分布式流数据系统,使用Zookeeper进行集群的管理。

整个系统由生产者、Broker Server和消费者三部分组成,生产者和消费者由开发人员编写,通过API连接到Broker Server进行数据操作。

重要术语:

Broker Server,Kafka集群包含一个或多个服务器,这种服务器被称为Broker Server。

Topic,主题,逻辑上的概念,用来对消息进行分类。对于我们开发人员,这是我们最关注的。

Partition,分区,物理上的概念。同一个topic的数据,会被分散的存储到一个或多个分区中(默认是一个),分区可以在同一台机器上,也可以是在多台机器上。

好处在于,有利于水平扩展,避免单台机器在磁盘空间和IO性能上的瓶颈,同时可以通过复制来增加数据冗余性,提高容灾能力。

如果只有一个server,就没有冗余备份,是单机而不是集群;如果有多个server,一个server为leader(领导者),其他servers为followers(跟随者),leader需要接收读写请求,followers仅作冗余备份,leader出现故障,会自动选举一个follower作为leader,保证服务不中断。

每个server都可能扮演一些partitions的leader和其它partitions的follower角色,这样整个集群就会达到负载均衡的效果。

为了做到均匀分布,partition的数量通常是Broker Server数量的整数倍。不要傻乎乎的弄了三个分区,分布在两台服务器上。

Consumer Group,同样是逻辑上的概念,同一个topic的数据,会广播给不同的group;同一个group中的消费者,只有一个消费者能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个消费者消费。group内的消费者可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,消费者的数量通常不超过partition的数量,且二者最好保持整数倍关系。

消息消费模型

按照JMS规范,消息消费模式有两种:点对点(point to point,queue)和发布/订阅(publish/subscribe,topic)。

点对点:Queue,不可重复消费

消息生产者生产消息发送到queue中,然后消息消费者从Queue中取出并且消费消息。

消息被消费以后,Queue中不再存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持同时存在多个消费者,但是对同一个消息而言,只能由一个消费者消费。

发布/订阅:Topic,可以重复消费

消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

发布订阅模式下,当发布者消息量很大时,显然单个订阅者的处理能力是不足的。实际上现实场景中是多个订阅者节点组成一个订阅组负载均衡消费topic消息即分组订阅,这样订阅者很容易实现消费能力线性扩展。可以看成是一个topic下有多个Queue,每个Queue是点对点的方式,Queue之间是发布订阅方式。

两种模式的区别

点对点模式,生产者发送一条消息到Queue,一个Queue可以有很多消费者,但是一个消息只能被一个消费者接收并消费,当没有消费者可用时,这个消息会被保存直到有一个可用的消费者来消费它。

发布订阅模式,消息生产者发送topic消息到Broker,只有订阅了topic的消费者才会收到消息。

从JMS规范上来说,Kafka没有实现点对点模式,只实现了发布/订阅模式

Kafka支持消息持久化,消费端为pull模型,消费状态和订阅关系由客户端端负责维护,消息被消费完后不会被删除,而会保留历史消息。因此支持多订阅,消息只存储一份就可以了。但是可能产生重复消费的情况。

结束

希望这些知识概念,对大家以后使用Kafka有帮助。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181205A1538M00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券