apache-kafka - 错误:复制因子:1 大于可用代理:0,当我创建 Kafka 主题时
问题描述
我在集群中运行 Kafka 时遇到一个问题。我一一解释。首先,当我从我的计算机上在集群 CSSH 上运行 Kafka 命令时,我收到此错误:
执行主题命令时出错:复制因子:比可用代理大 2:1。 [2019-01-06 15:12:36,587] 错误 org.apache.kafka.common.errors.InvalidReplicationFactorException:复制因子:比可用代理大 2 : 1. (kafka.admin.TopicCommand$)
实际上,我在我的计算机上运行 CSSH 来访问集群,在集群上运行 Zookeeper 和 Kafka 服务器后,当我运行创建主题的命令时,我得到了错误。在集群中,我在 node1 上的 server.properties 上有这些设置:
broker.id=1
port=9092
listeners=PLAINTEXT://150.20.11.137:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
sockeet.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=10073741824
log.retention.check.interval.ms=300000
zookeeper.connect= 150.20.11.134:2186, 150.20.11.137:2186,
150.20.11.157:2186
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
在每个节点的 zookeeper.properties 我有这个设置:
dataDir=/tmp/zookeeper
clientPort=2186
maxClientCnxns=0
另外,我在集群节点上运行每个命令来运行 Kafka 和 Zookeeper:
./bin/zookeeper-server-start.sh ./config/zookeeper.properties
./bin/kafka-server-start.sh ./config/server.properties
之后,我想在集群中使用此命令创建一个主题,然后在每个节点上出现上述错误:
./bin/kafka-topics.sh --create --zookeeper localhost:2186 --
replication-factor 2 --partitions 3 --topic testFlink
你能告诉你具体是什么问题吗?我的集群设置有什么问题?
提前致谢。
解决方案
我怀疑你是否能够成功地形成一个集群。启动集群时,请确保首先启动所有 3 个 zookeeper 节点,然后是三个代理。您可以参考这篇文章,检查Kafka是否已形成集群。
更新:
我忽略了您正在使用的 zookeeper 属性,它缺少创建集群所需的基本键值对。zookeeper 的以下属性应该是好的开始。考虑到您有 3 个 zookeeper 节点,zk 节点上的zookeeper.properties
or zoo.cfg
(如果它是独立的 zk)文件应该如下所示。
zk-1 属性
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2186
dataDir=/opt/zookeeper/data
server.1=0.0.0.0:2888:3888
server.2=<zk_2-ip>:2888:3888
server.3=<zk_3-ip>:2888:3888
zk-2 属性
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2186
dataDir=/opt/zookeeper/data
server.1=<zk_1-ip>:2888:3888
server.2=0.0.0.0:2888:3888
server.3=<zk_3-ip>:2888:3888
zk-3 属性
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2186
dataDir=/opt/zookeeper/data
server.1=<zk_1-ip>:2888:3888
server.2=<zk_2-ip>:2888:3888
server.3=0.0.0.0:2888:3888
好的,所以在你启动 zookeeper 进程之前,你还需要做一件事。签出dataDir
您正在使用的属性,在此示例中为/opt/zookeeper/data
. 对于每个动物园管理员,您必须创建一个名为的文件myid
,并为 zk-1 输入值 1,为 zk-2 输入 2,为 zk-3 输入 3。然后你启动 zookeepers,它应该形成一个集群。您可以使用像echo "1" > /opt/zookeeper/data/myid
zk-1 这样的 bash cmd。休息将是相似的。
推荐阅读
- ios - Flutter 应用程序停留在物理 iPhone 的安装和启动步骤
- django - Django 将数字呈现为 5 星评级
- reactjs - 无法将 react/styled 组件正确发布到使用 create-react-app 构建的 npm
- react-native - GooglePlaces自动完成基本搜索
- c - C 程序中的错误“munmap_chunk():无效指针”
- javascript - 如何使用jquery按Enter键提交动态生成的表单
- python - 如果满足 NaN 阈值,Python 从 DF 中删除所有特征实例
- excel - 如何在Excel中传递带有参数的字符串以进行评估?
- wpf - 使用 WebBrowser 控件创建 WPF 应用程序的限制
- mongodb - 如何修复带有未知 GeoJSON 类型错误的 MongoDB 地理键错误?