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

相关推荐
新猿一马10 小时前
Spring Kafka核心参数说明
kafka
是一个Bug10 小时前
Java后端开发面试题清单(50道) - 分布式基础
java·分布式·wpf
大猫和小黄10 小时前
Java ID生成策略全面解析:从单机到分布式的最佳实践
java·开发语言·分布式·id
ZePingPingZe11 小时前
CAP—ZooKeeper ZAB协议:从理论到实践的一致性与可用性平衡之道
分布式·zookeeper
掘金-我是哪吒11 小时前
完整的Kafka项目启动流程
分布式·kafka
无心水14 小时前
【分布式利器:腾讯TSF】7、TSF高级部署策略全解析:蓝绿/灰度发布落地+Jenkins CI/CD集成(Java微服务实战)
java·人工智能·分布式·ci/cd·微服务·jenkins·腾讯tsf
Yeats_Liao1 天前
MindSpore开发之路(二十四):MindSpore Hub:快速复用预训练模型
人工智能·分布式·神经网络·机器学习·个人开发
IT大白1 天前
2、Kafka原理-Producer
分布式·kafka