Kafka学习笔记
参加拉勾教育大数据训练营课程笔记
1. 介绍
2. 架构
3. 核心概念
心跳
4. 环境搭建
参考集群安装文档。
4. 生产与消费
5. 集成Kafka到SpringBoot
6. 生产者 - 数据生产流程
6.1 生产者原理
6.2 生产者参数
6.3 序列化和反序列化
6.4 分区器
6.5 拦截器 (producer intercepter, consumer intercepter)
7. 消费者
7.1 消费组
7.2 消费者参数
7.3 订阅
7.4 位移提交
_consumer_offsets
7.5 位移管理
7.6 消费组偏移量
7.7 分区分配策略(partition assignor)
RangeAssignor
RoundRobinAssignor
StickyAssignor
自定义分配策略
import org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor;
import org.apache.kafka.common.TopicPartition;
import java.util.*;
public class MyAssignor extends AbstractPartitionAssignor {
}
properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, MyAssignor.class.getName());
再平衡
7.8 消费者拦截器
7.9 消费组管理
8. 管理
主题管理
分区副本分配
分区副本机制
Leader分区选举
分区重分配(扩展)
kafka-reassign-partitions.sh --zookeeper node1:2181/kafka --topics-to-move-json-file topics-to-move.json --broker-list "0,1" --generate
kafka-reassign-partitions.sh --zookeeper node1:2181/kafka --topics-to-move-json-file topics-to-move.json --broker-list "0,1" --execute
kafka-reassign-partitions.sh --zookeeper node1:2181/kafka --topics-to-move-json-file topics-to-move.json --broker-list "0,1" --verify
偏好分区leader
按初始设置的relica assignment重新分配。创建topic时指定leader, follower。
# 三台机器,三个分区,
# 0:1:2 0分区为leader副本,1和2是follower副本
kafka-topics.sh --zookeeper node1:2181/kafka --create --topic demo3 --replica-assignment "0:1:2,1:0:2,2:1:0"
# 当一台机器宕机,分区再平衡
# 恢复宕机机器,执行kafka-peferred-replica-election.sh,将恢复到创建topic时指定的leader
kafka-peferred-replica-election.sh --zookeeper node1:2181/kafka
也可以指定偏好的配置文件
kafka-peferred-replica-election.sh --zookeeper node1:2181/kafka --path-to-json-file preferred-replica-election.json
{
"partitions":[
{
"topic": "foo", "partition": 1
},
{
"topic": "bar", "partition": 2
}
]
}
分区副本因子
一个副本一台服务器,使用kafka-reassign-partitions.sh
设置
{
"version":1,
"partitions":[
{"topic":"tp_re_02","partition":0,"replicas":[0,1]},
{"topic":"tp_re_02","partition":1,"replicas":[0,1]},
{"topic":"tp_re_02","partition":2,"replicas":[1,0]}
]
}
kafka-reassign-partitions.sh --zookeeper node1:2181/kafka --topics-to-move-json-file partition.json --broker-list "0,1" --generate
kafka-reassign-partitions.sh --zookeeper node1:2181/kafka --topics-to-move-json-file partition.json --broker-list "0,1" --execute
kafka-reassign-partitions.sh --zookeeper node1:2181/kafka --topics-to-move-json-file partition.json --broker-list "0,1" --verify
主题参数
KafkaAdminClient
151 9824 0134
9. 物理存储
稀疏索引构建
*.index - 消息偏移量对物理地址映射
*.timeindex - 消息偏移量时间映射
*.log - 第一条消息的偏移量为文件名
leader-epoch-checkpoint
索引文件切割
日志索引
Log Segment
日志清理
零拷贝机制
mmap,sendfile实现零拷贝