kafka使用场景与设计原理
消息队列
消息+队列(MessageQueue,简称MQ)。
本质是就是个队列,FIFO先入先出,只不过队列中存放的内容是message,从而叫消息队列。
主要用途:不同服务server、进程process、线程thread之间通信。
为什么要引入消息队列?

同步需要到了统计才能道app进行计算,

当达到消息队列设置的阈值时,直接在网关位置返回即可,


消息队列



如果几秒出现先超过阈值,后少于阈值时,可以使用磁盘缓存数据,每次处理max的数据,其余数据在后续降峰时再进行处理。

broker对应一台服务器,与服务器一一对应的

在处理队列的数据的时候,我们采用从队列里面pull拉取数据的方式,而不是队列主动push推送数据,考虑到了每个消费者自身消费情况进行处理,更能保证一个健康的不阻塞的流程。考虑到消费者的处理能力
发布者彼此不知道对方的存在。


考虑到队列崩溃的情况。


consumer读完数据后发送一个确认,





组件发布订阅,组内是点对点模式。




kafka安装
shell
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y openjdk-11-jdk
# 检查Java版本
java -version
50.02安装







水平扩充


57.05


R/W都从leader副本读取,只有leader失效才重新选举leader再从中读取。


每个分区他的副本在不同的机器上。避免一台机器dump导致服务不能用了的情况。















如zeromq 出了就删除。





就是计算得到n,m,其中前面m个消费者分配得到n+1个分区(partion),剩余的消费者分配得到n个分区。

x消费者分配到的分区数量差距不大,最好。

robin 如果消费者减少了,需要重新分配分区


stick策略



下面的方式尽量减少变动。







安装librdkafka



c

单个分区多个消费者没有意义。



安装成功

下载方式
镜像链接确实有问题,最新版本可能已经变化。让我提供几种解决方案:
方案1:使用官方Apache镜像(最新稳定版)
bash
# 查看Kafka最新版本
curl https://downloads.apache.org/kafka/ | grep -o 'kafka_[0-9]\.[0-9]\.[0-9]' | sort -V | tail -1
# 或者直接使用官方镜像(推荐)
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
# 或者使用archive镜像(版本更全)
wget https://archive.apache.org/dist/kafka/3.6.1/kafka_2.13-3.6.1.tgz
方案2:使用国内镜像站
bash
# 清华镜像
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz
# 华为云镜像
wget https://mirrors.huaweicloud.com/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz
# 腾讯云镜像
wget https://mirrors.cloud.tencent.com/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz
方案3:先查看可用版本再下载
bash
# 查看阿里云镜像的目录结构
curl https://mirrors.aliyun.com/apache/kafka/
# 或者使用
wget -O - https://mirrors.aliyun.com/apache/kafka/ | grep -o 'href="[^"]*kafka_[^"]*tgz"' | cut -d'"' -f2
# 直接使用3.7.0(目前最新稳定版)
sudo wget https://mirrors.aliyun.com/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz
方案4:直接安装(推荐)
bash
# 使用最新稳定版
cd /opt
sudo wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
# 如果网速慢,可以用axel多线程下载
sudo apt-get install axel # Ubuntu/Debian
sudo yum install axel # CentOS/RHEL
axel -n 10 https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
方案5:使用Docker(最简单,推荐)
bash
# 如果只是测试或开发,直接用Docker
cd /opt
mkdir kafka-docker
cd kafka-docker
# 创建docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
zookeeper:
image: bitnami/zookeeper:3.9
container_name: zookeeper
restart: always
ports:
- "2181:2181"
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
volumes:
- ./zookeeper_data:/bitnami/zookeeper
kafka:
image: bitnami/kafka:3.7
container_name: kafka
restart: always
ports:
- "9092:9092"
- "9093:9093"
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
depends_on:
- zookeeper
volumes:
- ./kafka_data:/bitnami/kafka
EOF
# 启动服务
docker-compose up -d
# 检查状态
docker-compose ps
方案6:手动选择版本
这是目前可用的版本列表,选择其中一个:
bash
# 版本列表(2025年1月可用的)
# 3.7.0 (最新)
# 3.6.1 (推荐稳定版)
# 3.5.2 (LTS版本)
# 3.4.1
# 3.3.2
# 下载推荐版本
cd /opt
sudo wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
# 或者
sudo wget https://archive.apache.org/dist/kafka/3.6.1/kafka_2.13-3.6.1.tgz
# 解压
sudo tar -xzf kafka_2.13-3.6.1.tgz
sudo ln -s kafka_2.13-3.6.1 kafka
方案7:直接使用我准备的命令
bash
# 在阿里云ECS上,推荐使用这个:
cd /opt
# 使用华为云镜像(速度快)
sudo wget https://mirrors.huaweicloud.com/apache/kafka/3.6.1/kafka_2.13-3.6.1.tgz
# 解压安装
sudo tar -xzf kafka_2.13-3.6.1.tgz
sudo ln -s kafka_2.13-3.6.1 kafka
sudo mkdir -p /opt/kafka/data
# 创建用户
sudo useradd -r -m -s /bin/bash kafka
sudo chown -R kafka:kafka /opt/kafka*
echo "安装完成!继续配置步骤..."
验证下载
bash
# 检查文件大小(应该是几百MB)
ls -lh kafka_2.13-*.tgz
# 检查文件完整性
sha256sum kafka_2.13-*.tgz
# 应该看到类似输出:
# kafka_2.13-3.6.1.tgz: OK
如果所有下载都失败
bash
# 1. 先检查网络
ping -c 3 mirrors.aliyun.com
# 2. 使用代理(如果有)
export http_proxy=http://your-proxy:port
export https_proxy=http://your-proxy:port
# 3. 或者从其他服务器下载后scp传输
# 在可以访问的服务器上下载,然后:
scp kafka_2.13-3.6.1.tgz root@your-ecs-ip:/opt/
# 4. 使用阿里云内网OSS(如果在内网)
# 在阿里云ECS内网中,可以使用内网OSS加速
推荐方案:对于阿里云ECS,我建议使用:
bash
cd /opt
sudo wget https://mirrors.huaweicloud.com/apache/kafka/3.6.1/kafka_2.13-3.6.1.tgz
这个镜像在国内访问速度很快,而且版本稳定。
如果还有问题,可以先安装Docker,然后使用Docker Compose方式,这样最简单,也最容易管理。
- 先检查网络
ping -c 3 mirrors.aliyun.com
2. 使用代理(如果有)
export http_proxy=http://your-proxy:port
export https_proxy=http://your-proxy:port
3. 或者从其他服务器下载后scp传输
在可以访问的服务器上下载,然后:
scp kafka_2.13-3.6.1.tgz root@your-ecs-ip:/opt/
4. 使用阿里云内网OSS(如果在内网)
在阿里云ECS内网中,可以使用内网OSS加速
**推荐方案**:对于阿里云ECS,我建议使用:
```bash
cd /opt
sudo wget https://mirrors.huaweicloud.com/apache/kafka/3.6.1/kafka_2.13-3.6.1.tgz
这个镜像在国内访问速度很快,而且版本稳定。
如果还有问题,可以先安装Docker,然后使用Docker Compose方式,这样最简单,也最容易管理。