docker一键部署kafka

1、kafka简介

Kafka 是一个分布式流处理平台,用于构建实时数据管道和流应用程序。它具有水平可扩展性、容错性、高吞吐量等特性,被广泛用于大数据和实时流处理场景。

2、核心概念和特性

核心概念:

Producer(生产者):向 Kafka 主题发布消息的客户端。

Consumer(消费者):从 Kafka 主题订阅并处理消息的客户端。

Broker(代理):Kafka 集群中的单个节点,负责处理消息的存储和转发。

Topic(主题):消息的类别或流名称,生产者向主题发送消息,消费者从主题读取消息。

Partition(分区):每个主题可以被分成多个分区,分区是 Kafka 并行处理的基本单元。每个分区是一个有序、不可变的消息序列。

Replica(副本):分区的副本,用于提供高可用性。每个分区有一个或多个副本,其中一个被选为 Leader,其他为 Follower。

Consumer Group(消费者组):一组消费者共同消费一个主题,每个分区只能被消费者组中的一个消费者消费,从而实现负载均衡。

Offset(偏移量):每条消息在分区中的唯一标识,消费者通过偏移量来追踪已读取的消息位置。
关键特性:

高吞吐量:Kafka 能够处理数百万条消息 per second,即使是在普通的硬件上。

可扩展性:通过增加节点可以轻松扩展集群,支持在线水平扩展。

持久性:消息被持久化到磁盘,并且支持数据备份防止数据丢失。

容错性:通过副本机制,即使部分节点失效,集群仍能继续工作。

实时性:消息被生产者创建后,消费者可以立即读取,延迟极低。
使用场景:

消息队列:作为传统消息队列的替代,用于解耦生产者和消费者。

网站活动跟踪:记录用户活动,如页面浏览、搜索、点击等,用于实时监控或离线分析。

日志聚合:从不同服务收集日志,并使其可用于查询和分析。

流处理:与流处理框架(如 Apache Storm、Spark Streaming、Flink)集成,进行实时数据处理。
架构组件:

Kafka Broker:集群中的每个节点都是一个 Broker,负责存储和转发消息。

ZooKeeper(或 KRaft):用于管理集群元数据、领导者选举和配置管理。从 Kafka 3.0 开始,可以使用 KRaft 模式(不需要 ZooKeeper)来运行 Kafka。

Connector API:用于构建可重用的生产者和消费者,将 Kafka 连接到现有系统。

Streams API:用于构建流处理应用程序,将输入流转换为输出流。
消息传递模型:

Kafka 采用发布-订阅模型,但也可以用于点对点通信(通过单个消费者组)。

数据保留:

Kafka 允许根据时间或大小设置数据保留策略,过期数据将被删除。

安装与部署:

Kafka 可以运行在单机模式(用于开发和测试)或集群模式(用于生产环境)。

版本演进:

从 2.8 版本开始,Kafka 开始引入 KRaft 模式(不再依赖 ZooKeeper),并在 3.0 版本中正式支持。KRaft 模式简化了 Kafka 的架构,提高了稳定性和可管理性。

1、拉取kafka镜像

bash 复制代码
# 原始
docker pull zookeeper:latest
# 阿里云x86 架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/zookeeper:latest
# 阿里云arm 架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_zookeeper:latest
# 原始
docker pull wurstmeister/kafka:latest
# 阿里云x86 架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/kafka:latest
# 阿里云arm 架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_kafka:latest

2、zookeeper安装创建目录

bash 复制代码
mkdir -p /data/zookeeper/{conf,logs,data}

3 运行命令

bash 复制代码
docker run -d \
--restart unless-stopped \
--name zookeeper \
-p 2181:2181 \
-v /data/zookeeper/data:/data \
-v /data/zookeeper/logs:/datalog \
-v /etc/localtime:/etc/localtime \
zookeeper:latest

4、kafka安装

bash 复制代码
mkdir -p /data/kafka/data
chmod 777 /data/kafka/data
bash 复制代码
docker run -d \
  --restart unless-stopped \
  --name kafka \
  -p 9092:9092 \
  -e KAFKA_ZOOKEEPER_CONNECT=10.11.12.115:2181 \
  -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
  -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.11.12.115:9092 \
  -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
  -e KAFKA_AUTO_CREATE_TOPICS_ENABLE=true \
  -v /etc/localtime:/etc/localtime \
  wurstmeister/kafka:latest

5、kafka基本使用

bash 复制代码
docker exec -it kafka bash
# 列出所有 Topic
kafka-topics.sh --list --bootstrap-server 10.11.12.115:9092
# 创建一个 topic
kafka-topics.sh --create --bootstrap-server 10.11.12.115:9092 --replication-factor 1 --partitions 6 --topic nginx              
#运行kafka生产者发送消息
kafka-console-producer.sh --broker-list 10.11.12.115:9092 --topic nginx
#发送消息
{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"} 
#删除kafka的topic
kafka-topics.sh --bootstrap-server 10.11.12.115:9092 --delete --topic nginx      

Kafka 的核心价值在于:

解耦系统:生产者和消费者无需直接通信

缓冲削峰:应对流量突发

数据持久化:消息可重放,不丢失

高吞吐量:支持大规模数据处理

实时处理:毫秒级延迟

适用场景:当你需要处理大量实时数据流,且需要保证数据不丢失、支持重放、高吞吐量时,Kafka 是绝佳选择。

不适用场景:如果只需要简单的任务队列,或对延迟要求极高(微秒级),可能有更轻量的选择(如 Redis、RabbitMQ)。

相关推荐
IT运维爱好者2 小时前
【国产】华为欧拉操作系统openEuler-LTS-22.03安装Docker-Compose保姆级教程
docker·容器·openeuler·欧拉
我叫安查查2 小时前
在Ubuntu系统上使用docker部署GPUStack教程【亲测成功】
linux·ubuntu·docker·gpustack
晨欣2 小时前
Dify Custom Tool 调用超时问题排查与解决方案(claude-4.5-opus-high)
docker·容器·dify
betazhou2 小时前
docker容器单机创建3个节点的MySQLMGR集群
运维·mysql·docker·容器·集群·mgr
赵庆明老师3 小时前
.net framework 的项目部署到docker
docker·eureka·.net
Chasing__Dreams3 小时前
kafka--基础知识点--3.2--消息的磁盘存储文件结构
分布式·kafka
weixin_46683 小时前
K8S-Deployment
云原生·容器·kubernetes
总有刁民想爱朕ha3 小时前
银河麒麟v10服务器版Docker部署MySQL 8教程
mysql·docker·容器·银河麒麟v10
脸大是真的好~3 小时前
Kafka相关面试题
分布式·kafka