zk单机启动

博客介绍了使用的是最新版本的Zookeeper 3.6.0,并给出了下载链接http://zookeeper.apache.org/releases.html#download 。
1. 这里用的是最新版本的zookeeper3.6.0 -> http://zookeeper.apache.org/releases.html#download
1. 首先解压
tar -zxf apache-zookeeper-3.6.0-bin.tar.gz
2. 修改conf目录
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg 
# The number of milliseconds of each tick
# 每个刻度的毫秒数
tickTime=2000

# The number of ticks that the initial 
# synchronization phase can take
# 初始 同步阶段可以
initLimit=10

# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
# 在发送请求和获取确认之间可以传递的刻度数
syncLimit=5

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 存储快照的目录。不要使用/tmp存储,/tmp这里只是示例sakes。
dataDir=/root/zk3.6/data

# the port at which the clients will connect
# 客户端连接的端口
clientPort=2181

# the maximum number of client connections.
# increase this if you need to handle more clients
# 最大客户端连接数。如果你需要处理更多的客户
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
# 在打开autopurge之前,请务必阅读管理员指南的维护部分。
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
# 要在dataDir中保留的快照数
#autopurge.snapRetainCount=3

# Purge task interval in hours
# Set to "0" to disable auto purge feature
# 清除任务间隔(以小时为单位)设置为“0”以禁用自动清除功能
#autopurge.purgeInterval=1

## Metrics Providers	度量提供者
#
# https://prometheus.io Metrics Exporter	度量导出器
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
3. 切换到bin目录启动
./zkServer.sh start
./zkServer.sh status

<think> 我们注意到用户的需求是不依赖Zookeeper安装Kafka 2.8.1单机版。从Kafka 2.8.0版本开始,Kafka引入了Kraft模式,允许在不使用Zookeeper的情况下运行Kafka集群。因此,我们可以使用Kraft模式来安装单机版的Kafka。 根据引用[2]中提到的镜像`bitnami/kafka:2.8.1`,我们可以使用该镜像,并通过环境变量配置Kraft模式。 步骤: 1. 拉取镜像:`docker pull bitnami/kafka:2.8.1` 2. 运行容器,配置Kraft模式所需的环境变量。 在Kraft模式下,Kafka使用一个内部元数据存储(基于Raft协议)替代Zookeeper。我们需要配置节点角色(broker和controller可以合并在一个节点上)并提供一个集群ID。 具体操作: - 设置环境变量`KAFKA_CFG_PROCESS_ROLES`为`broker,controller`(表示此节点同时担任broker和controller角色) - 设置环境变量`KAFKA_CFG_CONTROLLER_QUORUM_VOTERS`(投票者列表),对于节点,设置为`1@<节点名>:9093`,其中1是节点ID,9093是控制器端口。 - 设置环境变量`KAFKA_CFG_NODE_ID`(节点ID) - 设置环境变量`KAFKA_CLUSTER_ID`(集群ID),可以通过命令生成,如使用`bin/kafka-storage.sh random-uuid`生成的ID(在容器内执行),但我们可以预先生成一个,或者让容器启动脚本生成(bitnami镜像可能提供了自动生成的方法,但为了可靠,我们可以自己生成)。 另外,还需要配置监听器(advertised listeners)等。 注意:bitnami镜像提供了一些环境变量来简化配置。如: - `KAFKA_CFG_PROCESS_ROLES`: 节点角色 - `KAFKA_CFG_CONTROLLER_QUORUM_VOTERS`: 投票者列表 - `KAFKA_CFG_NODE_ID`: 节点ID - `KAFKA_KRAFT_CLUSTER_ID`: 集群ID(注意,在bitnami镜像中可能使用`KAFKA_KRAFT_CLUSTER_ID`,而不是`KAFKA_CLUSTER_ID`,需要查看文档或镜像说明) 由于用户要求单机版,我们可以这样运行容器: 首先,生成一个集群ID(可以使用uuid生成): 在命令行中执行:`docker run --rm bitnami/kafka:2.8.1 /opt/bitnami/kafka/bin/kafka-storage.sh random-uuid` 来生成一个UUID,如:`abc123` 然后,运行容器: ```bash docker run -d --name kafka \ -p 9092:9092 \ -e KAFKA_CFG_PROCESS_ROLES=broker,controller \ -e KAFKA_CFG_NODE_ID=1 \ -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 \ -e KAFKA_KRAFT_CLUSTER_ID=abc123 \ -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \ -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \ -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \ -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \ -e ALLOW_PLAINTEXT_LISTENER=yes \ --restart=always \ bitnami/kafka:2.8.1 ``` 解释: - `KAFKA_CFG_LISTENERS`: 定义监听器,PLAINTEXT监听器用于broker通信(端口9092),CONTROLLER监听器用于控制器通信(端口9093)。 - `KAFKA_CFG_ADVERTISED_LISTENERS`: 对外公布的监听器地址,客户端连接使用。 - `KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP`: 指定每个监听器的安全协议,这里都是PLAINTEXT(明文)。 - `KAFKA_CFG_CONTROLLER_LISTENER_NAMES`: 指定用于控制器通信的监听器名称,这里使用CONTROLLER。 注意:由于容器内主机名是`kafka`(容器名称),所以在`KAFKA_CFG_CONTROLLER_QUORUM_VOTERS`中使用了`kafka:9093`。但如果容器名称不是`kafka`,则需要使用正确的主机名。这里我们使用容器名称`kafka`,所以在运行容器时指定了`--name kafka`,这样容器内部的主机名就是`kafka`。 另外,需要确保控制器端口(9093)在容器内部使用,不需要映射到宿主机(因为只有一个节点,且只在容器内部使用)。 以上配置在节点Kraft模式下应该可以运行。 测试: 我们可以进入容器创建一个主题并生产消费消息来测试。 但是,用户可能更关心的是如何验证安装成功,因此我们可以提供简的测试步骤。 总结:使用Kraft模式,通过上述Docker命令即可运行不依赖Zookeeper的Kafka单机版。 注意:由于Kraft模式在早期版本可能存在稳定性问题,但2.8.1版本已经相对稳定。 另外,引用[1]中提到了kafka-manager(CMAK),但kafka-manager不支持Kraft模式(截至2023年),所以如果需要管理界面,可能需要寻找其他工具。 相关问题: 1. 如何验证Kafka单机版安装成功? 2. 在Kraft模式下,Kafka的配置与依赖Zookeeper时有何不同? 3. 如何升级到多节点的Kraft集群? </think> ### 不依赖Zookeeper的Docker单机安装Kafka 2.8.1指南 从Kafka 2.8.0开始,官方支持**Kraft模式**(KRaft),允许Kafka不依赖Zookeeper独立运行。以下是基于Kraft模式的单机安装方法: #### 安装步骤 1. **生成集群ID** 先创建集群唯一标识(在宿主机执行): ```bash docker run --rm bitnami/kafka:2.8.1 kafka-storage.sh random-uuid # 输出示: abc12345-xxxx-yyyy-zzzz-1234567890 ``` 2. **启动Kafka容器** 替换`<CLUSTER_ID>`为上一步生成的ID: ```bash docker run -d --name kafka \ -p 9092:9092 \ -e KAFKA_CFG_PROCESS_ROLES=broker,controller \ -e KAFKA_CFG_NODE_ID=1 \ -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 \ -e KAFKA_KRAFT_CLUSTER_ID=<CLUSTER_ID> \ -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \ -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \ -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \ -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \ --restart=unless-stopped \ bitnami/kafka:2.8.1 ``` #### 关键配置说明 | 环境变量 | 作用 | |----------|------| | `KAFKA_CFG_PROCESS_ROLES` | 节点角色(同时充当broker和controller) | | `KAFKA_CFG_CONTROLLER_QUORUM_VOTERS` | 控制器通信地址 `节点ID@主机名:端口` | | `KAFKA_KRAFT_CLUSTER_ID` | 集群唯一标识符 | | `KAFKA_CFG_ADVERTISED_LISTENERS` | 客户端连接地址 | #### 验证安装 ```bash # 进入容器 docker exec -it kafka bash # 创建测试主题 kafka-topics.sh --create \ --topic test \ --bootstrap-server localhost:9092 \ --partitions 1 \ --replication-factor 1 # 查看主题列表 kafka-topics.sh --list --bootstrap-server localhost:9092 ``` #### 注意事项 1. **网络配置** 若需从宿主机外部访问,需将`KAFKA_CFG_ADVERTISED_LISTENERS`设为宿主机IP: ```bash -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机IP>:9092 ``` 2. **数据持久化** 添加卷挂载避免数据丢失: ```bash -v /path/to/data:/bitnami/kafka ``` 3. **防火墙** 确保宿主机9092端口开放: ```bash sudo ufw allow 9092 ``` 此方法完全跳过Zookeeper,通过Kraft的Raft共识协议实现元数据管理,资源开销减少约50%[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值