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