一、消息系统
点对点消息系统,能够保证消费消息的顺序,但是条消息只能否被消费一次。
发布订阅系统消息:不能保证消费消息的的顺序,每个消费者都可以消费消息,也就说一条消息可以被消费多次。
二、kafka术语
保证低延迟,零丢失、高吞吐量
Topic:在Kafka中,使用一个类别属性来划分数据的所属类,划分数据的这个类称为topic。如果把Kafka看做为一个数据库,topic可以理解 数据库中的一张表,topic的名字即为表名。
Partition:topic中的数据分割为一个或多个partition。每个topic至少有一个partition,默认只有一个。每个partition中的数据使用多个文件存储。partitio 的数据是有序的,partition间的数据丢失了数据的顺序。如果topic有多个partition,消费数据时就不能保证数据的顺序。在需要严格保证消 消费顺序的场景下,需要将partition数目设为1。(我们在创建Kafka Topic的时候,是可以指定partition的个数的)。
Partition offset:每条消息都有一个当前Partition下唯一的64字节的offset,它指明了这条消息的起始位置,就好比每一行的数据。
Replicas of partition:副本是一个分区的备份。副本不会被消费者消费,副本只用于防止数据丢失。即消费者一定不会消费副本partition中 据,而是从leader的partition中读取数据。同时,还需要注意的是,我们的单机版Kafka不能给partition设置副本。因为我们只有一台机器, 本需要保存在其他的机器或者实例上。
Broker:Kafka 集群包含一个或多个服务器,服务器节点称为broker。broker存储topic的数据。如果某topic有N个partition,集群有N个 broker,那么每个broker存储该topic的一个partition,主要为了维护整个系统的负载均衡。
Producer:生产者即数据的发布者,该角色将消息发布到Kafka的topic中。broker接收到生产者发送的消息后,broker将该消息追加到当前 追加数据的partition文件中。生产者发送的消息,存储到一个partition中,生产者也可以指定数据存储的partition。
Consumer:消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。多个 Consumer 构成 Group。
三、kafka的安装与使用
3.1 kafka安装
官网地址:http://kafka.apache.org/downloads
下载最新版kafka
首先解压安装包,之后修改config/server.properties文件,将broker.id由0改为1
设置一下日志的输出目录
使用kafka(进入到kafka根目录下)
3.2 kafka使用
# Kafka 依赖于 ZK,先启动 ZK
zookeeper:bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# 启动 Kafka 服务器
kafka-server:bin/kafka-server-start.sh config/server.properties
# 创建 Topic
create topic: bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
# 查看 Topic 列表
topic list: bin/kafka-topics.sh --list --zookeeper localhost:2181
# 启动 Producer
producer: bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
# 启动 Consumer
consumer: bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
# 查看单个 Topic 信息
topic info: bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
1、首先启动zookeeper,因为kafka的运行依赖于zookeeper
[root@localhost kafka_2.11-2.1.0]# bin/zookeeper-server-start.sh -daemon
config/zookeeper.properties
2、之后使用jps命令查看zookeeper是否启动成功。
3、启动kafka
[root@localhost kafka_2.11-2.1.0]# bin/kafka-server-start.sh config/server.properties
4、创建topic
[root@localhost kafka_2.11-2.1.0]# bin/kafka-topics.sh --create --zookeeper
localhost:2181 --replication-factor 1 --partitions 1 --topic test
成功创建topic
5、查看topic列表
[root@localhost kafka_2.11-2.1.0]# bin/kafka-topics.sh --list --zookeeper localhost:2181
可以看到kafka中topic的列表
6、生产者发送消息
[root@localhost kafka_2.11-2.1.0]# bin/kafka-console-producer.sh
--broker-list localhost:9092 --topic test
7、消费者消费消息
[root@localhost kafka_2.11-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092
--topic test --from-beginning
8、测试发送消息,消费消息
在生成者这边发送消息
可以看到在消费者这边顺利接受到了消息
9、查看topic的信息
[root@localhost kafka_2.11-2.1.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
我们可以看到topic相关的信息
四、kafka的核心特性
4.1 kafka producer消息分区
4.2 消费者组
kafka保证一个partition只被一个消费者组内的其中一个消费者消费。
加入一个新的consumer,会重平衡。
添加消费者会再次重平衡,消费者组消费者的数量一定要小于等于topic的partition否则就会造成浪费。
两个消费者组消费Topic T1