kafka学习笔记(一)

简介: kafka学习笔记(一)

一、Kafka注册到zk


1.1、kafka在zk中的整体注册信息结构


(图片来源:https://www.cnblogs.com/qingyunzong/p/9007107.html


image.png

2.1、topic信息的注册


当broker启动时,会到对应topic节点下注册自己的broker.id到对应分区的ISR列表中;当broker退出时,zk会自动更新其对应的topic分区的ISR列表,ISR列表用于分区leader的选举。

#登录zkCli查看kafka节点分区信息(为了更直观的查看,对json进行了格式化)
[zk: 127.0.0.1:3181(CONNECTED) 59] get /brokers/topics/dataPush
{
    "version": 1,
    "partitions": {
        "2": [0, 1],
        "1": [2, 0],
        "0": [1, 2]
    }
}
cZxid = 0x1000000c4
ctime = Tue Dec 18 16:09:32 CST 2018
mZxid = 0x1000000c4
mtime = Tue Dec 18 16:09:32 CST 2018
pZxid = 0x1000000c7
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 58
numChildren = 1
[zk: 127.0.0.1:3181(CONNECTED) 60]


对应磁盘上的结构如下


image.png


二、Kafka副本机制


2.1、基本概念


Kafka的分区及副本会均匀的落到多个broker上


如果分区数为3,副本数为1,存储结构如下


image.png


如果分区数为3,副本数为2,则每个分区有两个个副本


kafka集群中,每个分区的副本保存在不同broker上,并且在这些副本中会选举出leader,其他为follower


image.png


2.2、Kafka副本同步机制


kafka副本创建分为同步复制和异步复制,由producer配置决定

>消息的确认模式
> # 0:只管发送,不管broker是否接收。这种方式为异步同步
> # 1:发送消息,并会等待leader 收到确认后。同步复制。
> # -1:发送消息,等待leader收到确认,并进行复制操作后,才返回,可靠性最高,同步复制。
> request.required.acks = 0


我们知道大部分集群系统都采用了超半数选举的策略来选举leader,如zk的zab算法,但是kafka不同,kafka内部动态维护了一个同步状态的副本集合(ISR),这个集合中的成员才有资格被选举为leader。只有所有ISR都收到写入,才认为对kafka分区的写入是commited。


同步过程如下


image.png

image.png

1:连接zk
2:由zk反馈leader信息
3:producer向leader发送消息,leader收到消息后,写入本地log
4:leader向消息同步到所有followers(实际是由followers 从leader pull消息),并将消息写入本地log
5:向leader发送ack消息
6:leader收到所有ack消息后,将ack反馈到producer


附录:


1:kafka consumer是线程非安全的,一个consumer对象只能一个线程操作。可以一个线程从kafka拉取数据,多个线程处理。


相关文章
|
消息中间件 数据采集 域名解析
数据采集-Lua集成kafka流程跑通|学习笔记
快速学习数据采集-Lua集成kafka流程跑通
数据采集-Lua集成kafka流程跑通|学习笔记
|
7月前
|
消息中间件 存储 分布式计算
Hadoop学习笔记(HDP)-Part.19 安装Kafka
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
187 0
Hadoop学习笔记(HDP)-Part.19 安装Kafka
|
消息中间件 Kafka 调度
Kafka 消费者案例 | 学习笔记
快速学习 Kafka 消费者案例
176 0
Kafka 消费者案例  |  学习笔记
|
消息中间件 负载均衡 Kafka
Kafka 生产者案例 | 学习笔记
快速学习 Kafka 生产者案例
137 0
Kafka 生产者案例  |  学习笔记
|
消息中间件 存储 弹性计算
消息队列 kafka 销售指南| 学习笔记
快速学习消息队列 kafka 销售指南
消息队列 kafka 销售指南| 学习笔记
|
消息中间件 弹性计算 分布式计算
Kafka 数据如何同步到 MaxCompute | 学习笔记
快速学习 Kafka 数据如何同步到 MaxCompute,介绍了 Kafka 数据如何同步到 MaxCompute系统机制, 以及在实际应用过程中如何使用。
Kafka 数据如何同步到 MaxCompute | 学习笔记
|
消息中间件 分布式计算 大数据
Structured_Source_Kafka_整合 | 学习笔记
快速学习 Structured_Source_Kafka_整合
Structured_Source_Kafka_整合 | 学习笔记
|
消息中间件 JSON 大数据
Structured_Source_Kafka_回顾 | 学习笔记
快速学习 Structured_Source_Kafka_回顾
Structured_Source_Kafka_回顾 | 学习笔记
|
消息中间件 分布式计算 Hadoop
Structured_Sink_Kafka | 学习笔记
快速学习 Structured_Sink_Kafka
Structured_Sink_Kafka | 学习笔记
|
消息中间件 JSON 分布式计算
Structred_Source_Kafka_需求 | 学习笔记
快速学习 Structred_Source_Kafka_需求
Structred_Source_Kafka_需求 | 学习笔记