Kafka---系统学习
1、前言
1.1、发布-订阅消息系统
1.1.1、消息(数据)发布者(发送者) 不会 直接 将 消息 发送给 接收者;
发布者 以 某种方式 对 消息 进行分类,接收者 订阅 消息;
发布-订阅系统 一般都有一个broker(消息发布的中心点);
1.2、Kafka
1.2.1、Kafka的 数据单元 被称为消息(消息:由 字节数组 组成);
1.2.2、为了提升效率,消息 被 分批次(批次:一组消息[属于 同一个 主题、同一个分区]) 写入 Kafka;
1.2.3、消息模式?
1.2.4、Kafka消息 以 主题 进行分类;
一个主题 被分为 多个 分区;
Kafka消息 以 追加的 方式 写入分区,以 先进先出 的顺序读取;
1.2.5、Kafka 通过 分区 实现 数据冗余、伸缩性,分区 可以分布在 不同的Server上;
1.2.6、Kafka客户端:
消息生产者:
a,一个消息 会被 发布到 指定的主题上(分区可以指定 ,也 可以由分区器 均衡分布到所有该主题的分区);
消息消费者:
a,消费者 订阅 一个或多个主题 ,按照 消息生成的顺序 读取消息;
b,消费者 通过 消息的偏移量 来 区分 已经读过的消息;
aa,偏移量:
一个不断递增的整数值;
创建消息时,Kafka 会 将偏移量 添加到 消息里;
指定的 分区中,每个消息的偏移量 都是唯一的;
消费者 把 每个分区 最后读取的消息偏移量 保存在 zookeeper或Kafka上,这样即使重启也不会丢失;
c,消费者 是 消费群组 的一部分;
aa,消费群组:
群组 保证 某个分区 同时 只能 被一个消费者 读取;
1.2.7、broker
a,一个 独立的Kafka服务器 被 称为 broker;
b,broker 接收 来自 生产者 的消息,为消息 设置 偏移量, 并 提交消息 到磁盘保存;
c,broker 为 消费者 提供 服务,对 读取 分区的请求 作出响应,返回 已存储到磁盘上的消息;
d,单个broker 可以 轻松处理 数千个分区 、每秒百万级 的消息量;
e,broker 是 broker集群 的组成部分;
2、为什么选择Kafka?
多生产者、多消费者、基于磁盘的数据存储、伸缩性、高性能
3、Kafka安装
3.1、Kafka是 Java开发的应用程序;
3.2、Kafka 使用 zookeeper 保存 集群的 元数据信息、消费者信息;
3.3、安装zookeeper--->安装Kafka
4、Kafka配置
4.1、server.properties
//broker的唯一标识符,默认值为0,必须唯一 broker.id=0 //port端口默认9092,也可以更改 listeners=PLAINTEXT://127.0.0.1:9092 //保存 broker元数据的zookeeper地址,端口默认2181 zookeeper.connect=localhost:2181 //Kafka的所有消息都存储在磁盘,log.dir指定消息存储位置 log.dirs=/tmp/kafka-logs
5、Kafka生产者
5.1、流程:
创建ProducerRecord对象(包含 目标主题、要发送的内容; 还可以指定 key、分区)--->key,value序列化 为字节数组(在网络中传输)--->分区器
--->Kafka服务器收到消息后返回一个响应
(成功:返回一个RecordMetaData对象[包含 主题、分区信息、在分区中的偏移量]
失败:返回一个错误--->生产者收到错误--->重新发送消息---->若几次后还是失败--->返回错误信息);
5.2、创建Kafka生产者
Kafka生产者3个必选的属性:
a,bootstrap.servers 指定broker的地址
b,key.serializer 消息的key的序列化方式(broker希望接收到的key,value都是字节数组)
c,value.serializer 消息的value的序列化方式
6、Kafka消费者
6.1、Kafka消费者 从属于 消费群组;
6.2、创建Kafka消费者
Kafka消费者参数:
a,bootstrap.servers 指定broker的地址
b,key.serializer 消息的key的序列化方式(broker希望接收到的key,value都是字节数组)
c,value.serializer 消息的value的序列化方式
d,group.id 消费群组
6.3、消费者 轮询 向kafka请求数据;