Kafaka安装和使用以及整和
- [一、 安装(docker)](#一、 安装(docker))
- [二、 kafaka基础知识](#二、 kafaka基础知识)
-
- 1)kafaka核心架构
- 2) 工作流程 工作流程)
一、 安装(docker)
1)创建docker-compose.yml文件
bash
mkdir kafka-demo
cd kafka-demo
touch docker-compose.yml
docker compose up -d
docker-compose.yml
yml
version: '3'
services:
kafka:
image: apache/kafka:latest # 镜像
container_name: kafka # 容器名
ports: # 映射端口
- "9092:9092"
environment:
KAFKA_NODE_ID: 1 # 当钱节点
# KRaft 模式
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093 # 监听端口
# controller Kafka集群节点之间通信
# plaintext 普通客户端端口
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
# 客户端如访问kafaka
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
# nodeId@host:port
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
2)测试
bash
docker exec -it kafka bash # 进入容器
# 创建topic
/opt/kafka/bin/kafka-topics.sh \
--create \
--topic test-topic \
--bootstrap-server localhost:9092
# 查看topic
/opt/kafka/bin/kafka-topics.sh \
--list \
--bootstrap-server localhost:9092
# 启动生产者
/opt/kafka/bin/kafka-console-producer.sh \
--topic test-topic \
--bootstrap-server localhost:9092
# 输入
hello
kafka

启动一个新终端
bash
docker exec -it kafka bash
/opt/kafka/bin/kafka-console-consumer.sh \
--topic test-topic \
--from-beginning \
--bootstrap-server localhost:9092
可以看到

二、 kafaka基础知识
1)kafaka核心架构
- Producer(生产者)
- 负责发送消息
- 可以是订单系统 、 日志系统 、webApp
- Consumer(消费者)
- 负责消费消息
- Topic(主题)
- Kafka 不直接存消息,消息会进入 Topic。
- 类似 文件夹 / 数据分类
例如:order-topic log-topic user-topic
- Partition(分区)
- 一个 Topic 可以拆成多个 Partition。
- 分区后可以可以并行写、并行读、横向扩展
- 本质就是多个日志文件
- Offset(偏移量)
Kafka 中消息长这样:
bash
Partition-0
0 -> hello
1 -> world
2 -> kafka
这个编号就是offset:
bash
0、1、2
作用:
- 标识消息位置
- 记录消费进度
-
Broker
Kafka 集群中的一台服务器。
- 组成 Kafka 集群
- 提供高可用
- 提供分布式能力
bash
Broker-1
Broker-2
Broker-3
- Consumer Group(消费者组)
- 多个消费者构成的消费者组
- 同一个分区只能被组内一个消费者消费,实现并行消费
2) 工作流程
bash
# 1.生产者发送消息
Producer
↓
Topic
# 2.Kafka写入Partition
Topic
├── P0
├── P1
└── P2
# 3.Consumer 拉取消息
Consumer -> 主动拉取