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)。

相关推荐
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
2601_961875243 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
程序员老赵3 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏3 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主3 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang3 天前
Docker 使用完整指南
运维·docker·容器
正经教主3 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
CodeStats3 天前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨3 天前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算