# Apache Kafka

[English](./README.md) | [中文](./README.zh.md)

此服务用于部署 Apache Kafka，一个分布式流处理平台，同时包含 Zookeeper 和可选的 Kafka UI。

## 服务

- `zookeeper`：用于 Kafka 协调的 Zookeeper 服务
- `kafka`：Kafka 代理服务
- `kafka-ui`：可选的 Kafka 管理 Web UI（配置文件：`ui`）

## 环境变量

| 变量名                             | 说明                                      | 默认值          |
| ---------------------------------- | ----------------------------------------- | --------------- |
| `KAFKA_VERSION`                    | Kafka 镜像版本                            | `8.2.0`         |
| `KAFKA_UI_VERSION`                 | Kafka UI 镜像版本                         | `v0.7.2`        |
| `ZOOKEEPER_CLIENT_PORT_OVERRIDE`   | Zookeeper 主机端口映射（映射到端口 2181） | `2181`          |
| `KAFKA_BROKER_PORT_OVERRIDE`       | Kafka 主机端口映射（映射到端口 9092）     | `9092`          |
| `KAFKA_JMX_PORT_OVERRIDE`          | JMX 主机端口映射（映射到端口 9999）       | `9999`          |
| `KAFKA_UI_PORT_OVERRIDE`           | Kafka UI 主机端口映射（映射到端口 8080）  | `8080`          |
| `KAFKA_NUM_PARTITIONS`             | 自动创建主题的默认分区数                  | `3`             |
| `KAFKA_DEFAULT_REPLICATION_FACTOR` | 默认副本因子                              | `1`             |
| `KAFKA_AUTO_CREATE_TOPICS_ENABLE`  | 启用自动创建主题                          | `true`          |
| `KAFKA_DELETE_TOPIC_ENABLE`        | 启用主题删除                              | `true`          |
| `KAFKA_LOG_RETENTION_HOURS`        | 日志保留时间（小时）                      | `168`           |
| `KAFKA_LOG_SEGMENT_BYTES`          | 日志段大小（字节）                        | `1073741824`    |
| `KAFKA_HEAP_OPTS`                  | Kafka 的 JVM 堆选项                       | `-Xmx1G -Xms1G` |
| `KAFKA_UI_READONLY`                | 将 Kafka UI 设置为只读模式                | `false`         |

请根据实际需求修改 `.env` 文件。

## 卷

- `zookeeper_data`：Zookeeper 数据目录
- `zookeeper_log`：Zookeeper 日志目录
- `kafka_data`：Kafka 数据目录

## 使用方法

1. 启动 Kafka 和 Zookeeper：

   ```bash
   docker compose up -d
   ```

2. 启动并包含 Kafka UI（可选）：

   ```bash
   docker compose --profile ui up -d
   ```

3. 访问 Kafka UI：`http://localhost:8080`（如已启用）

## 测试 Kafka

1. 创建主题：

   ```bash
   docker exec kafka kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
   ```

2. 列出主题：

   ```bash
   docker exec kafka kafka-topics --list --bootstrap-server localhost:9092
   ```

3. 生产消息：

   ```bash
   docker exec -it kafka kafka-console-producer --topic test-topic --bootstrap-server localhost:9092
   ```

4. 消费消息：

   ```bash
   docker exec -it kafka kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server localhost:9092
   ```

## 配置

- Kafka 默认配置为单节点部署
- 生产环境请考虑调整副本因子和其他设置
- 可通过环境变量添加自定义 Kafka 配置

## 安全提示

- 此配置用于开发/测试目的
- 生产环境请启用 SSL/SASL 身份验证
- 保护 Zookeeper 通信安全
- 定期更新 Kafka 版本以获取安全补丁
