Kafka
修炼之道
字母哥出品
课程大纲
白话消息队列
字母哥出品
kafka 与快递柜
异步解耦:有了快递柜,消费者不用等待快递员,用户体验增强
流量削峰:早高峰快件多,放入快递柜,用户不用疲于等待与接收事件阻塞耗时
缓冲批处理:一次性取多个邮件,爽!
消息队列缺点
引入复杂度
导致暂时的数据不一致
极端情况下,接受"消息可能会丢失"的事实
通用消息传递模型
字母哥出品
P2P模型(点对点模型)
集群消费模式(消费者组模式)
Publish/Subscribe模型(发布订阅模型)
kafka修炼之道
典型应用场景解析
字母哥出品
请求同步处理模型
结合消息队列请求异步处理模型
单体应用解耦
数据库为核心的应用
消息队列为核心的应用
kafka修炼之道
核心概念解析
字母哥出品
代理商broker
集群代理商
主题与分区
分区与消费者组
分区副本与高可用
分区副本的数据同步
几个重要名词及一个参数
AR(Assigned Replicas)
ISR(In Sync Replicas)
OSR(Out Sync Replicas)
replica.lag.time.max.ms
默认值10秒
kafka修炼之道
单机版shell脚本
快速安装
字母哥出品
安装JDK
查询已安装java安装包
# 通过该命令查找安装包
rpm -qa | grep java
# 或者通过yum命令查找安装包
yum list installed |grep java
卸载openjdk安装包
rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115;
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5;
yum -y remove java-1.4.2-gcj-compat-1.4.2.0-40jpp.115;
yum -y remove java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5;
解压JDK安装包
tar -zxvf jdk-11.0.13_linux-x64_bin.tar.gz -C /usr/local/
/etc/profile
配置环境变量
export JAVA_HOME=/usr/local/jdk-11.0.13;
export CLASSPATH=.:${JAVA_HOME}/lib:$CLASSPATH;
export PATH=${JAVA_HOME}/bin:$PATH;
安装包
kafka_2.13-2.8.0.tgz
apache-zookeeper-3.6.3-bin.tar.gz
setup.sh
修改setup.sh
启动zookeeper
/opt/zookeeper/default/bin/zkServer.sh start
# 查看zookeeper状态
/opt/zookeeper/default/bin/zkServer.sh status
启动kafka
/opt/kafka/default/bin/kafka-server-start.sh \
-daemon \
/opt/kafka/default/config/server.properties
创建topic
/opt/kafka/default/bin/kafka-topics.sh --create \
--bootstrap-server 192.168.1.111:9092 \
--replication-factor 3 --partitions 1 \
--topic test
查看topic详情
/opt/kafka/default/bin/kafka-topics.sh \
--describe --bootstrap-server 192.168.1.111:9092 \
--topic test
模拟生产数据
/opt/kafka/default/bin/kafka-console-producer.sh \
--bootstrap-server 192.168.1.111:9092 \
--topic test
模拟消费数据
/opt/kafka/default/bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.1.111:9092 \
--from-beginning --topic test
kafka修炼之道
企业级kafka
生产集群安装
字母哥出品
安装kafka集群几大步骤
准备工作-服务器规划设置
集群服务器之间免密登录
zookeeper集群搭建(kafka3不需要)
kafka2.0&3.0集群搭建
集群测试与调优(安全策略)
本节内容介绍-准备工作
服务器规划与ip映射
linux下新建用户
开放防火墙端口
最大打开文件句柄数
主机规划
ip | 主机名称 | 规划用户 |
---|---|---|
192.168.1.111 | zimug1 | kafka |
192.168.1.112 | zimug2 | kafka |
192.168.1.113 | zimug3 | kafka |
设置主机名称
hostnamectl set-hostname zimug1
/etc/hosts
文件格式说明
127.0.0.1 localhost.localdomain localhost
192.168.1.100 zimug.com zimug
我的配置
192.168.1.111 zimug1
192.168.1.112 zimug2
192.168.1.113 zimug3
新建用户
adduser kafka
修改用户密码
passwd kafka
防火墙管理
启动防火墙:
systemctl start firewalld
关闭防火墙:
systemctl stop firewalld
查看防火墙状态:
systemctl status firewalld
开机禁用 :
systemctl disable firewalld
开机启用 :
systemctl enable firewalld
开放kafka端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent;
firewall-cmd --zone=public --add-port=2181/tcp --permanent;
firewall-cmd --zone=public --add-port=2888/tcp --permanent;
firewall-cmd --zone=public --add-port=3888/tcp --permanent;
加载配置生效
firewall-cmd --reload
查看开放端口
firewall-cmd --list-all
cat /proc/sys/fs/file-max;
cat /proc/sys/fs/nr_open;
解决“Too many open files”异常
/etc/security/limits.conf
kafka soft nofile 65535
kafka hard nofile 65535
kafka修炼之道
集群主机免密登录
字母哥出品
集群主机免密登录原理
生成密钥&转发公钥
集群主机之间连通性测试
免密登录原理
免密登录规划主机
ip | 主机名称 | 规划用户 |
---|---|---|
192.168.1.111 | zimug1 | kafka |
192.168.1.112 | zimug2 | kafka |
192.168.1.113 | zimug3 | kafka |
修改目录权限
chmod 755 ~/;
chmod 700 ~/.ssh/;
chmod 600 ~/.ssh/authorized_keys;
kafka修炼之道
zookeeper
集群安装
字母哥出品
zookeeper简介
磁盘目录规划及配置文件说明
执行安装及shell脚本说明
启动服务及检查服务状态
zookeeper简介
软件安装目录和数据存储目录通常分开存储。
数据存储目录规划,/data单独挂载一块磁盘,/data/zookeeper存放zk数据
主机规划,一定要是奇数个
ip | 主机名称 | 规划用户 |
---|---|---|
192.168.1.111 | zimug1 | kafka |
192.168.1.112 | zimug2 | kafka |
192.168.1.113 | zimug3 | kafka |
配置文件说明
> more /home/kafka/zookeeper/apache-zookeeper-3.6.3-bin/conf/zoo.cfg
dataDir=/home/kafka/data/zookeeper/data
server.1=zimug1:2888:3888
server.2=zimug2:2888:3888
server.3=zimug3:2888:3888
> more /home/kafka/data/zookeeper/data/myid
1
kafka修炼之道
shell脚本
一键安装集群
手动安装怎么操作?
使用脚本一键安装集群
在一台服务器上启停整个集群
安装JDK
主机与IP映射
新建kafka用户
开放防火墙端口-kafka服务端口、zk服务端口
扩大最大打开文件句柄数
集群主机之间免密登录
一键安装zookeeper集群(3.x版本不需要)
kafka修炼之道
集群高可用
配置与验证
高可用测试
测试正常生产消费
停掉一个节点
停掉两个节点
创建主题
kafka-topics.sh --create \
--bootstrap-server zimug1:9092,zimug2:9092,zimug3:9092 \
--replication-factor 3 --partitions 1 \
--topic test
查看主题
kafka-topics.sh --describe \
--bootstrap-server zimug1:9092,zimug2:9092,zimug3:9092 \
-topic test
生产数据
kafka-console-producer.sh --topic test \
--bootstrap-server zimug1:9092,zimug2:9092,zimug3:9092
消费数据
kafka-console-consumer.sh --topic test \
--from-beginning --bootstrap-server zimug1:9092,zimug2:9092,zimug3:9092
建议参数
# 允许默认创建Topic
auto.create.topics.enable=true
# __consumer_offsets的分区数设置(n>1,建议值3)
offsets.topic.replication.factor=n
修改分区副本数
kafka-reassign-partitions.sh \
--bootstrap-server zimug1:9092,zimug2:9092,zimug3:9092 \
--reassignment-json-file ./offsets-topic.json --execute
验证修改分区副本数
kafka-reassign-partitions.sh \
--bootstrap-server zimug1:9092,zimug2:9092,zimug3:9092 \
--reassignment-json-file ./offsets-topic.json --verify