0.消息队列(Message queue,MQ)
- 0.0 什么是消息队列?
- 0.1 消息队列的种类
- 0.点对点模式
一对一,一个生产者对应一个消费者;
消费者主动拉取数据,消息被消费后会被清除;
一条消息只会被一个消费者所读取。 - 1.发布-订阅模式
一对多,一个生产者对应多个消费者;
消息被消费后不会立马被清除,而是间隔一定时长后才会作清除动作。
- 0.点对点模式
- 0.2 各类别的优缺点
1.kafka中的基本概念
- 生产者
- 消费者
- 消费组
- broker
- partition
- replication
- leader
- ISR
2.kafka的基本操作
-
2.0 启动
- 0.启动zookeeper
zkServer.sh start
- 1.启动kafka
kafka-server-start.sh -daemon ./config/server.properties # -daemon 是将服务方后台 ```
- 0.启动zookeeper
-
2.1 常用命令
- 0.查看topic
topic命令操作的是kafka的元数据,因此连接的必须是存储元数据的zookeeperkafka-topics.sh --list --zookeeper localhost:2181
- 1.创建topic
kafka-topics.sh --create --zookeeper localhost:2181 --topic first_topic --partitions 2 --replication-factor 2 # --topic 指定topic name --partitions 指定当前topic的分区数(用于负载均衡及并发) --replication-factor 备份的数量,其值必须小于等于kafka broker的数量,即安装kafka节点的数量
- 2.删除topic
kafka-topics.sh --delete --zookeeper localhost:2181 --topics first_topic # 删除topic时,配置文件的delete.topic.enable=true(默认),如为false,则无法删除 # delete操作并不会马上将topic的数据删除掉,而是在log.dirs下将topic作一个标记(数据文件名称增加delete字样),之后在进行自动删除
- 3.topic基本信息
kafka-topics.sh --describe --topic first_topic --zookeeper localhost:2181
- 4.控制台生产者
生产者写入的数据是如何分配到partition的?(api下)kafka-console-producer.sh --topic first_topic --broker-list localhost:9092
- 如果指定partition,则写入到指定的partition
- 如果未指定partition,但指定key,则写入到key的hash值所对应的partition
- 如果未指定partition,也未指定key,则第一条消息写入时,随机生成一个整数,之后以轮询的方式指定partition(round-robin算法)
- 5.控制台消费者
kafka-console-consumer.sh --topic first_topic --bootstrap-server localhost:9092 --from-beginning
- 0.查看topic
4.策略
-
4.0.消费者分区
- 0.一个消费者可以同时订阅多个topic
- 1.一个topic的一个partition只能被一个消费者消费
- 2.一个消费者可以同时订阅一个topic中的多个partition
- 3.topic中的partition指派给消费者时有两种策略
- 0.roundrobin,轮询方式;
- 1.range,同一个消费者消费的partition编号是连续的。
- 4.当消费者数量变化时,partition会重新指派给消费者
-
4.1 偏移量
- 0.9之前,offset保存在zookeeper;0.9之后,offset保存在kafka的topic中,topic名为__consumer_offset
3.log
- 0.数据存储地址
kafka的数据会存储在server.properties配置的log.dirs下 - 1.进程产生的log
进程产生的日志存储在$KAFKA_HOME/logs/server.log中