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

相关推荐
洛豳枭薰3 分钟前
消息队列关键问题描述
kafka·rabbitmq·rocketmq
lucky670736 分钟前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
Coder_Boy_43 分钟前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
袁煦丞 cpolar内网穿透实验室2 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
岁岁种桃花儿2 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
人间打气筒(Ada)2 小时前
GlusterFS实现KVM高可用及热迁移
分布式·虚拟化·kvm·高可用·glusterfs·热迁移
xu_yule2 小时前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
難釋懷6 小时前
分布式锁的原子性问题
分布式
ai_xiaogui8 小时前
【开源前瞻】从“咸鱼”到“超级个体”:谈谈 Panelai 分布式子服务器管理系统的设计架构与 UI 演进
服务器·分布式·架构·分布式架构·panelai·开源面板·ai工具开发