生产经验 面试重点
Broker面试重点
代码,开发重点
67 章了解
如何记录行为数据
前端 传到日志 日志传到Flume 传到HADOOP
但是如果数据特比大,HADOOP就承受不住了
控流消峰
Flume传给Kafka
存到Kafka
Hadoop 从Kafka取数据 ,而不是Kafka强行发
类似 菜鸟驿站, 先存取来,我们主动去取,或者指定他去送
消息队列存储数据,而不是直接发给处理系统,处理完一部分,再取,再处理
通过中间件接口,适配不同数据源和目的地
允许用户将消息放入队列,但不立即处理,然后再需要的时候处理。
为什么异步处理快: 同步需要等待
点餐:
同步:服务员过来给我点餐 ,这里需要服务员过来
异步:扫桌子码自己点餐
生产者 - Broker - Group
TopicA是什么?
这里的分区是什么?
分区: 物理分割
为什么要分割:结合集群分散存储
topic 是一整个数据 ,分区是为了将数据分在不同的Broker上。类似于HDFS,
Broker是物理存储
Partition 类似于DN
类似权限管理把,组内并行消费,便于管理
备份功能,备份partition 多个副本, 类似HDFS,类似DN(存入一下子3个)把
多副本时,一个副本叫leader 另一个副本叫follower,
也是选出来的角色 交互时只和leader交互
follower平时只有备份作用,但是当leader倒下时,他直接成为leader
这里是存储数据的目录,而不是存Kafka自己日志的目录
高可用, 配置多个
replicas 是存储副本的位置
lsr 是目前存活的副本
分区数只能改大,不能改小
副本数修改,
通过JSON手动修改
消费者按最新的offect进行消费
[atguigu@hadoop102 software]$ tar -zxvf kafka_2.12-3.3.1.tgz -C /opt/module/
[atguigu@hadoop102 module]$ mv kafka_2.12-3.3.1/ kafka
配置文件目前只需要修改三个
broker编号 不同机器只需要编号不同即可
log.dir 数据存放位置
zookeeper.connect 连接集群的地址
[atguigu@hadoop102 kafka]$ cd config/
[atguigu@hadoop102 config]$ vim server.properties
# 修改1 broker的全局唯一编号,不能重复,只能是数字。
broker.id=0
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#修改2 这里其实是是存放到Kafka的数据的地方 kafka运行日志(数据)存放的路径,路径不需要提前创建,kafka自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/opt/module/kafka/datas
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
# 每个topic创建时的副本数,默认时1个副本
offsets.topic.replication.factor=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#每个segment文件的大小,默认最大1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认5分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#修改3 连接集群的位置 配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
sudo vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
这个是为了启动的时候不需要输入一长串地址
比如:bin/kafka-server-start.sh -daemon config/server.properties
这里的config是kafka的路径 启动需要输入全路径
bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties
修改后
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
#! /bin/bash
if [ $# -lt 1 ]
then
echo "参数错误,请输入start或者stop"
exit
fi
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo "---------------启动 $i Kafka ----------------------"
ssh $i "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo "---------------停止 $i Kafka ---------------------"
ssh $i "$KAFKA_HOME/bin/kafka-server-stop.sh -daemon $KAFKA_HOME/config/server.properties"
done
};;
esac
连接Broker 操作Kafka必须有这个命令
既可以输入一个,也可以输入多个
kafka-topics.sh --bootstrap-server hadoop102:9092,hadoop103:9092,hadoop104:9092
– create +空格 ±-topic+空格+主题名
– delete +空格 ±-topic+空格+主题名
主题 主题名 一般放最后
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 1 --replication-factor 3 --topic first
–topic 定义topic名
–replication-factor 定义副本数
–partitions 定义分区数
–list
可以看单个主题,可以看全部主题
不加后缀默认查看全部
查看单个需要+空格 ±-topic+空格+主题名
设置分区副本
–replication-factor
// 手动调整kafka topic分区的副本数
{
// 1. 版本号 这个是自定义的版本号
"version":1,
// 2. 分区是重点,因为副本改变分区也要改变。
// 其实就是将分区的副本重新进行布局
"partitions":
[
{"topic":"first","partition":0,"replicas":[1,2,0]},
{"topic":"first","partition":1,"replicas":[2,0,1]},
{"topic":"first","partition":2,"replicas":[2,0,1]}
]
}
// 运行命令
//kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --reassignment-json-file ./rep.json --execute
更新系统默认的配置。
–config
临时调配参数
1.操作
--topic <String: topic>
[atguigu@hadoop102 kafka]$ bin/kafka-console-producer.sh
bin/kafka-console-producer.sh --bootstrap-server hadoop102:9092 --topic first
kafka-console-consumer.sh --bootstrap-server +集群+ 主题
kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first
为什么消费者未开启时,生产者发送的消息,等消费者起来了收不到?
没有指定消费者组时,每次开启,消费者属于的消费者组就是随机的,那么就无法进行断点续传
当主动指定组后,再次登录,在指定组后,会自动开启断点续传功能
想要提前的顺序,就需要,–from-beginning
但是不能和用户组一起跑