文章目录
简介
分布式流处理平台:发布订阅消息队列、具有存储功能、一个流处理框架
优势
- 吞吐量好,性能好
- 伸缩性好,支持在线扩展
- 容错性和可靠性(容错性:一个消息存储三份 )
- 与大数据生态紧密结合,可无缝对接hadoop、strom、spark等
消息模型
JMS规范
进局限于java
队列:点对点;
主题:发布订阅
常见的:Apache ActiveMQ
AMQP模型
是一个协议,通常协议可以跨语言
三大实体:队列、信箱、绑定
消息先放在信箱里面,根据绑定的路由规则,再将消息放到队列里面,供消费者消费
特点:支持事务,数据一致性高,对性能要求不高
典型的消息中间件:Pivotal RabbitMQ
MQTT
基本概念
Topic主题
消息存在在主题中。
类似于数据库中的表,通常相同类型的消息存在同一个主题中,topic属于半结构化的数据,因此不同类型的消息也可以存储在一个主题中。
Partition分区
一个主题存在多个分区。不同的分区存在不同的服务器上
分区使得kafka具有了拓展性。
分区是一个线性增长的不可变的提交日志
偏移量
消息存储到分区之后,消息就不可变更,kafka会给每条消息分配一个偏移量。
偏移量用于记录每条消息的位置。
kafka可以通过偏移量来对消息进行提取,但是无法检索和查询消息内容
偏移量唯一不可重复,依次递增。
Record消息记录
以键值对的形式存储。如果不指定key,则key值为空。
如果key值为空,kafka将以轮询的方式,将消息存到不同的分区中
如果指定了key,则相同key的消息会被写到同一个分区
副本
避免数据丢失。
通过设置replication-factor=n (副类因子,包括主分区在内,一共有n个副本)来规定副本数量。
主分区又称为:leader。所有数据的写入、读取都是leader中
Broker消息代理
Kafka集群是由多个消息代理组成的
负责消息的读写请求,并将数据写入磁盘中。
通常每个服务器上启动一个broker
下载
-
下载kafka scala安装包 Apache Kafka
-
放到本地虚拟机中,然后进行解压缩
tar -xzvf kafka_2.13-3.5.1.tgz
bin目录:kafka操作的一些shell脚本
config目录:配置文件
libs目录:依赖包
site-docs:说明文档
本地伪分布式安装
配置
kafka依赖zookeeper(新版本的kafka不再依赖zookeeper)
-
将zookeeper配置文件复制到etc文件夹下
cp config/zookeeper.properties
zookeeper文件内容:
dataDir :日志内容
clientPort:端口
-
搭建伪分布式节点(此处搭建三个节点)
-
复制config中的server文件并重命名 搭建几个节点复制几个
cp config/server.properties etc/server-0.properties
server 文件用于配置kafkapok 的配置文件
-
进入etc目录,更改配置文件内容
将 listeners=PLAINTEXT://:9092之前的注释去掉;
log-dirs、broker.id 进行区分
节点的端口不能一样
必要配置项:broker.id、log-dirs、listeners(监听器)
监听器:指定broker启动时本机的监听名称、端口
😕/9092 默认协议:PLAINTEXT
😕/192.168.1.10:9092 默认协议:SSL 前两种效果一致
😕/hostname:9092 默认协议:SASL_PLAINTEXT
😕/0.0.0.0:9092 默认协议:SASL_SSL 适用于多网卡的情况,监听所有的9092端口
advertised.listeners:对外发布的访问IP和端口,注册到zookeeper中,给客户端使用。默认与监听器配置相同
启动伪分布式集群
启动命令在bin目录下 start命令 配置文件
-
使用start命令 zookeeper配置文件 启动zookeeper
./zookeeper-server-start.sh ../etc/zookeeper.properties
-
启动kafka实例
./kafka-server-start.sh ../etc/server-0.properties
创建主题
进入bin目录
可通过 ./kafka-topics.sh
查看参数 描述中带有 REQUIRED的表示必带
常用参数 | 备注 |
---|---|
–create | 创建主题 |
–topic | 主题名 |
–describe | 主题描述 |
–list | 查看主题列表 |
–delete | 删除主题 |
–alter | 修改主题 |
–bootstrap-server | 必带(老版kafka必配置的是 --zookeeper) |
–partitions | 分区数量 |
–replication-factor | 副本数 |
创建一个主题名为test1 分区数量为3 副本数为2的主题
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test1 --partitions 3 --replication-factor 2
查看分区状态 ./kafka-topics.sh --bootstrap-server localhost:9092 --topic test1 --describe
消费者
./kafka-console-consumer.sh
0.11 版本之前消费者的消费位置放在zookeeper,之后的放在kafka的主题中消费
将消费者加入主题中 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 localhost:9093 localhost:9094 --topic test1
如果想从头消费 加上 --frombegin 参数
生产者
./kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test1
进入消息发送窗口
消息从窗口发出后,消费者就可以接收到相应的信息了