kafka

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方式,这样最简单,也最容易管理。

  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方式,这样最简单,也最容易管理。

相关推荐
曹天骄1 天前
基于 Cloudflare Worker 构建分布式测速调度系统:KV 与 D1 数据层设计实战教程
分布式·缓存
Prince-Peng1 天前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
曹天骄1 天前
基于 Cloudflare Worker + KV 构建高性能分布式测速调度系统(工程实战)
分布式
奋进的芋圆1 天前
Spring Boot 3 高并发事务与分布式事务企业级完整解决方案
spring boot·分布式
没有bug.的程序员1 天前
Spring Boot 与 Kafka:消息可靠性传输与幂等性设计的终极实战
java·spring boot·后端·kafka·幂等性·消息可靠
你才是臭弟弟1 天前
Docker 拉取 Kafka 镜像及策略配置
docker·容器·kafka
淡泊if1 天前
Kafka部署模式详解:从单机到分布式集群的核心选择
分布式·kafka
鱼跃鹰飞1 天前
面试题:什么是时钟回拨问题?怎么解决
分布式·系统架构
无心水1 天前
分布式环境下定时任务与SELECT FOR UPDATE的陷阱与解决方案
分布式·后端·wpf·xxl-job·quartz·定时任务·selectforupdate
缘友一世1 天前
大模型分布式推理:Ray 与 vLLM/Transformers 的协同架构深度解析
分布式·架构·transformer·ray·vllm