没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1. 什么是kafka? 2. 消息队列介绍 3. 为什么使用消息队列? 4. kafka的特点 5. kafka的使用场景 6. kafka系统的架构基础(重点) 7. kafka的物理存储目录结构 8. kafka操作实战-命令行管理topic-命令行生产消费 9. kafka操作实践-producer生产这api示例 10. producer生产者发送数据的流程—主线程—缓存—sender线程 11. producer重要参数详细解析 12. consumer的基本api开发模板代码 13. consumer的高级api特性—assign订阅—指定位移消费 14. consumer的重点参数解析 15. 手动位移提交消费者偏移量(调用kafka api) 16. 其他重要参数 17. 补充工具—版本管理—git—gitee 18. api方式进行集群管理 19. kafka和flume的整合—kafkasource—kafkasink 20. kafka原理加强—日志分段条件 .....
资源推荐
资源详情
资源评论














kafka
1. 什么是 kafka?
kafka 是一个分布式消息中间件,支持分区的、多副本的、多订阅者的、基于 zookeeper 协
调的分布式消息系统。
通俗来说:kafka 就是一个存储系统,存储的数据形式为“消息”;
它的主要作用类似于蓄水池,起到一个缓冲作用。
2. 消息队列介绍
消息队列:activemq,rabbitmq,rocketmq;
消息队列常用于两个系统之间的数据传递;
分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息;
有两种主要的消息传递模式:点对点传递模型、发布-订阅模式。
点对点:一对一
发布-订阅:一对多
3. 为什么使用消息队列?
➢ 异步
➢ 削峰
➢ 解耦
注:消息队列本身具有顺序性,而 kafka 只有在一个分区下才具有顺序性。
消息队列
传统策略

4. kafka 的特点
➢ 高吞吐量、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每
个 topic 可以分多个 partition,由多个 consumer group 对 partition 进行 consume 操
作。
➢ 可扩展性:kafka 机器支持热扩展。
➢ 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。
➢ 容错性:允许集群中节点失败(若副本数量为 n,则允许 n-1 个节点失败)
➢ 高并发:支持数千个客户端同时读写
5. kafka 的使用场景
➢ 日志收集:一个公司使用 kafka 收集各种服务的 log,通过 kafka 统一接口服务的方式
开放给各自 consumer,例如:hadoop、habse、solr 等。
➢ 消息系统:解耦生产者和消费者,缓存消息等。
➢ 用户活动跟踪:kafka 进程被用来记录 web 用户或者 app 用户的各种活动,然后这些互
动信息被各个服务器发布到 kafka 的 topic 中,然后订阅者通过订阅这些 topic 来做实
时监控分析,或者装载到 hadoop、数据仓库中作离线分析和挖掘。
➢ 运营指标:kafka 也经常用来记录运维监控数据。包括收集各种分布式应用数据,各种
操作的集中反馈,比如警告和报告。
➢ 流式数据处理:比如 spark streaming 和 flink。
6. kafka 系统的架构基础(重点)

➢ producer:消息生产者,就是向 kafka broker 发消息的客户端
➢ consumer:消息消费者,向 kafka broker 取消息的客户端。
➢ consumer group:单个或者多个 consumer 可以组成一个 consumer group;这是 kafka
用来实现消息的广播(发个所有的 consumer)和单播(发送给任意一个 consumer)的
手段。一个 topic 可以有多个 consumer group。
➢ topic:数据的逻辑分类,地位等同于数据库中“表”的概念;
➢ partition:topic 中数据的具体管理单元,可以理解为 hbase 中的“region”概念;一个
topic 可以划分为多个 partition,分别到多个 broker 上管理,每个 partition 由
一个 kafka broker 服务器管理;
partition 中的每个消息都会被分配一个递增的 id(offset);每个 partition 是一个有序的
队列,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个
partition 间)的顺序。
➢ broker:一台 kafka 服务器就是一个 broker。一台 kafka 集群由对勾 broker 组成。一个
broker 可以容纳多个 topic 组成的多个 partition。
➢ offset:消息在底层中索引的位置,kafka 底层的存储文件就是以文件中第一条消息的
offset 来命名的,通过 offset 可以快速定位到消息的具体存储位置。
➢ leader:partition replica 中的一个角色,producer 和 consumer 只跟 leader 交互(负责
读写)。
➢ 副本 replica:partition 的副本,保障 partition 的高可用(replica 副本数目不能大于 kafka
broker 节点的数目,否则报错)
每个 partition 的所有副本中,必包括一个 leader 副本,其他的就是 follower 副本。
➢ follower:partition replica 中一个角色,从 leader 中拉取复制数据(只负责备份)。
如果 leader 节点宕机,follower 会从中选出新的 leader。
➢ 偏移量 offset:每一条数据都有一个 offset,是数据在该 partition 中的唯一标识(其实
就是消息的索引号)。各个 consumer 会保存其消费到的 offset 位置,这样下次可以从
该 offset 位置开始继续消费;consumer 的消费 offset 会保存在一个专门的 topic
(__consumer_offsets)中;(0.10.x 版本一起是保存在 zk 中)

➢ 消息 message:
简单来说,kafka 中的每个 message 由一对 key-value 构成。
kafka(0.10.x) message format
各个字段的含义介绍如下:
⚫ crc:占用 4 个字节,主要用于校验消息的内容
⚫ magic:这个占用 1 个字节,主要用于标示 kafka 版本。kafka 0.10.x 默认值为 1
⚫ attributes:占用 1 个字节,这里面存储了消息压缩使用的编码以及 Timestamp 类型。
目前 kafka 支持 gzip、snappy 以及 lz4(0.8.2 引入)三种压缩格式;后四维如果是 0001
则表示 gzip 压缩,如果是 0010 则是 snappy 压缩,如果是 0011 则是 lz4 压缩,如果是
0000 则表示没有压缩。第 4 个体 bit 为如果为 0,代表 create time;如果为 1 代表
append time;其余(第 5~8 位)保留;
⚫ key length:占用 4 个字节。主要标识 key 的内容的长度;
⚫ key:占用 N 个字节,存储的是 key 的具体内容。
⚫ value length:占用 4 个字节。主要标识 value 的内容的长度。
⚫ value:value 即是消息的真实内容,在 kafka 中这个也叫做 payload。
7. kafka 的物理存储目录结构
➢ 存储目录,名称规范:topic 名称-分区号
➢ 数据文件,名称规范:
生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率
低下,kafka 采取了分片和索引机制;
1) 每个 partition 的数据将分为多个 segment 存储
2) 每个 segment 对应两个文件,“.index”文件和“.log”文件。
index 和 log 文件以当前 segment 的第一条消息的 offset 命名。
index 索引文件中的数据为:消息 offset→log 文件中该消息的物理偏移量位置;

8. kafka 操作实战-命令行管理 topic-命令行生产消费
➢ 创建 topic
bin/kafka-topics.sh --zookeeper hdp102:2181/kafka --create --replication-factor
3 --partitions 3 --topic test
注:/kafka 这里是在 zookeeper 下的目录
➢ 查看所有 topic 列表
bin/kafka-topics.sh --zookeeper hdp102:2181/kafka --list
➢ 查看 topic 信息
bin/kafka-topics.sh --zookeeper hdp102:2181/kafka --describe --topic test
注:ISR:in sync replicas 同步副本(当然也包含 leader 本身)
OSR:out of sync replicae 失去同步的副本(数据与 leader 之间的差距超过配置
的阈值)
➢ 修改 topic 信息
修改分区数:
bin/kafka-topics.sh --alter --topic test --partitions 4 --zookeeper
hdp102:2181/kafka
kafka 只支持增加分区,不支持减少分区
原因是:减少分区,代价太大(数据的转移,日志段合并)
剩余29页未读,继续阅读
资源评论


星星点灯1996
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
