Kafka消息队列基础

时间:2022-12-13 09:07:37

基础概念

集群-cluster

kafka以集群方式对外提供服务,一个集群可以包含1-N个代理(机器)

代理-broker

kafka集群中的一个节点(机器)

主题-topic

一个消息类型,或者说一个消息队列

消费组-consumer group

同一系统的不同节点称作一个消费组
一个消费组可以消费多类消息

机器:可以为物理机,也可以为虚拟机,也可以为不同的kafka实例

运行环境

kafka运行在linux机器上,安装过程可以参考
漫游Kafka实战篇之搭建Kafka运行环境

apache kafka官网

jre

Kafka是用scala编写的,可以运行在JVM上,所以需要安装jre。如果机器上没有java环境,则需要安装。

zookeeper

kafka是以集群形式提供服务,所以需要zookeeper注册中心来管理这些服务。
官网提供的kafka安装包中,集成了zookeeper,可以使用其自带的zk,也可以使用其它的zk集群。
具体使用的zk写在kafka的配置文件中。
启动kafka之前应该启动zookeeper

架构图

应用架构图

Created with Raphaël 2.1.0 应用1 应用1 kafka集群 kafka集群 应用N 应用N 生产消息 消费消息 处理消息 生产消息 消费消息

应用时间序列图

Created with Raphaël 2.1.0 kafka集群 kafka集群 zookeeper集群 zookeeper集群 应用 应用 注册服务提供 启动 注册服务消费 通知

消费者组

Kafka消息队列基础
图示说明:图中表示了1个kafka主题(topic),2消费者组(consumer group)
这一个topic有4个分区,分布存储在2个机器上:Server1和Server2
消费组A有2个节点C1和C2,消费组B有4个节点C3-C6

图中在kafka集群中有2台机器,Server1和Server2

一个topic分区只能被一个消费组中的一个节点消费,也就是说要求:
消费节点数《=主题分区数
当消费节点数多于主题分区数时,多出来的节点将消费不到消息。

生产和消费

消费

消费时需要对消费者(组)的身份做校验,而对消费的主题不做校验。所以消费时需要:
1. 消费者组:一个系统一个
2. 消费者组token:与消费者组一对一
3. 所消费的topic:1到多个

生产

生产时需要验证生产者有生产该类消息的权限,所以生产时需要:
1. 所生产topic:一个生产者只能生产一类消息
2. 该topic的token: 与topic一对一

如果要生产多类消息,则需要多个生产者。