如何设置多个代理节点?

时间:2018-10-02 16:39:09

标签: apache-kafka confluent

我尝试了以下-
./confluent start给出了-

  

此CLI仅用于开发,不用于生产
  https://docs.confluent.io/current/cli/index.html

     

使用CONFLUENT_CURRENT:/tmp/confluent.w1S9B10m   启动Zookeeper
  动物园管理员是[UP]   开始kafka
  kafka是[UP]
  启动架构注册表   schema-registry是[UP]
   开始kafka-rest
  kafka-rest是[UP]
  开始连接
  连接是[UP]   启动ksql-server
  ksql-server是[UP]

此后,./kafka-topics --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic users为主题“用户”创建3个分区。但这会带来错误-

  

执行主题命令时出错:复制因子:大3   比可用经纪商多:1. [2018-10-03 02:47:19,079]错误
  org.apache.kafka.common.errors.InvalidReplicationFactorException:   复制因子:比可用代理大3:1.
  (kafka.admin.TopicCommand $)

如何设置3个经纪人? This的帖子与此类似,但我不知道如何实现。

修改
现在,我在不同的Linux终端窗口上使用./confluent start,然后使用kafka-server-start /path/to/server-1.properties和server-2.properties。但是,当我尝试启动server-2时,出现“ JVM无法分配内存”错误。

  

OpenJDK 64位服务器VM警告:INFO:   os :: commit_memory(0x00000000c0000000,1073741824,0)失败;   error ='无法分配内存'(errno = 12)

     

没有足够的内存供Java Runtime Environment使用   继续。
  本机内存分配(mmap)无法映射1073741824    提交保留内存的字节。

3 个答案:

答案 0 :(得分:1)

您收到该错误,是因为您请求的复制因子为3,但只有一个代理。由于Kafka无法满足请求的复制因子(因为您没有> = 3个代理),因此它拒绝创建主题。

steps shown here用于安装多节点环境。其他两个相关文档:

如果您只想使用一个代理(例如,对于dev),则可以减少复制因子:

./kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic users

答案 1 :(得分:1)

有一个简单的示例,使用terraform和ansible启动5个AWS实例,然后在GitHub上将3个经纪人群集部署到其中

请注意,这仅是为了配合使用,我们需要做更多的工作以使ELB在您要向Internet公开的各种服务(REST Proxy,C3)之前更像生产。 )。

答案 2 :(得分:1)

  

现在,我在不同的Linux终端窗口上使用./confluent start,然后使用kafka-server-start /path/to/server-1.properties和server-2.properties。但是有时候我会收到“ JVM无法分配内存”的信息。

内存不足,是因为要启动总共3个代理,1个Zookeeper,1个架构注册表,1个Kafka Connect服务器,1个Kafka REST服务器,KSQL服务器,以节省总内存使用量< strong>超过 8 GB ...如果您下载了Confluent Enterprise,则可以同时获得Control Center,以实现更多用途。

强烈建议不要在单个计算机上运行所有单个服务,甚至不要在单个计算机上运行多个Kafka代理,因为如果只有一个磁盘,那么无论如何都将受到一个实例的IO约束

如果只需要Kafka,则不需要融合的cli命令。运行Zookeeper启动命令,然后运行Kafka启动命令。

You're welcome to start either of those in separate terminals on different ports and pointing to different storage locations,但它们都是内存密集型应用程序,因此您应该给它们提供大量可用的堆空间(在Apache Kafka页面上,它说在生产部署中至少为6G)