【问题标题】:Kafka multi/two nodes setup with producer and consumer on different server/nodeKafka多/两个节点设置与不同服务器/节点上的生产者和消费者
【发布时间】:2021-05-17 19:56:53
【问题描述】:

我正在努力建立一个多节点 Kafka 集群。

为了简化我的请求,假设我有两个服务器/节点,node1 和 node2。 node1 的 ip 为 100.100.100.1,node2 的 ip 为 100.100.100.2。所有配置都将在用户 kafka@node1 和 kakfa@node2 下。

目前,我可以按照快速入门示例在任一节点上设置单节点、单代理 Kafka:https://kafka.apache.org/quickstart

我还可以创建模拟日志/主题(为简化起见,生产者只是来自控制台/终端的书面消息)并写入 node1 上的生产者。这样的topic也可以在node1上消费,我们把这个topic命名为logtest。

我想要实现的是node2上的Kafka可以消费node1上产生的主题logtest。但是,我不知道如何开始。我找不到一个好的帖子来指导如何建立这种连接。这样 node2 就可以使用来自其他节点/服务器的主题/生产者(在这个例子中是 node1)。已设置 ssh 登录,因此 node1 和 node2 之间不需要密码即可在其间复制文件。

我的问题通常是如何通过命令行(.sh 文件)在两个节点上设置 Kafka(内容在一个节点上生成并在另一个节点上使用)?

【问题讨论】:

  • “server.properties”这个名字对于刚接触 Kafka 的人来说有点误导。在我的理解中,它实际上是broker的属性,broker可以设置在一台机器上,也可以设置在不同的机器上(不同的ips)。其实是zookeeper负责管理不同机器之间的连接。

标签: apache-kafka


【解决方案1】:

因为你不应该有偶数个 Zookeeper 服务器,所以在 node1 上启动 Zookeeper

在node1上设置这些属性并启动Kafka

listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://external.lan.ip.here:9092

将node2zookeeper.connect字符串指向node1,给它一个不同的broker.id,设置类似的监听属性后在其上启动Kafka。

您现在拥有 2 个节点的 Kafka 集群,可以在任一主机上的 shell 脚本中使用 --bootstrap-servers localhost:9092(也是彼此的地址)来创建主题、生产者和消费者

重复以进一步扩展集群

【讨论】:

  • 非常感谢。这个答案和上一个答案一起帮助解决了我研究了一周的问题。
【解决方案2】:

多代理 Kafka 集群正是您所需要的。多代理集群具有多个节点/代理(Kafka 二进制文件)作为集群同步工作,以提供容错性和可扩展性。

设置集群:-

按照here 提供的设置基本集群(1 个 Zookeeper 节点和一个 kafka-broker)后。您需要执行以下步骤才能将另一个代理添加到集群。

  1. 使用不同的 id 配置新代理。在新代理 server.properties 中,将代理 id 更改为唯一值。
  2. 添加它响应的新服务器名称:-
  3. 将旧的 zookeeper 位置添加到新的代理。下面的集群在 localhost 上运行(broker-0 在端口 9092,broker-1 在端口 9093,zookeeper 在端口 2181)。 (Zookeeper 是一个决定如何保持领导地位和保持集群服务数据的人)

现在使用新的服务器属性启动新代理。

./kafka-server-start.sh ../config/server.properties

当服务器成功启动而没有失败时。我们可以继续通过 zookeeper cli 检查新的 broker 是否已成功连接到集群。(这很重要,因为 zookeeper 是维护领导和 broker 活跃性的那个)

./zookeeper-shell.sh localhost:2181

如您所见,id 0,1 表明两个代理都属于同一个集群。

你现在有一个 1 zookeeper 2 broker kafka 集群。

创建主题:-

集群启动后,我们需要创建一个分布在 2 个代理之间的主题。每个topic有数据分成两部分(partition),每个partition都有重复副本,防止数据丢失(replication-factor)

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 2 --topic helloWorld

检查主题是如何设置的:-

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic helloWorld

在这里我们可以看到每个分区及其副本分布在两个 kafka 代理中。

话题消费:-

开始生产使用:-

./kafka-console-producer.sh --broker-list localhost:9092 --topic helloWorld

开始消费使用:-

./kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic helloWorld

注意我是如何生产到 :9092 (broker-0) 但从 :9093 (broker-1) 消费的。

这显示了数据是如何在代理内部同步的。但是,为了获得最佳实践和高可用性,请始终使用 --broker-list 参数中的所有代理

【讨论】:

  • 非常感谢您的详细解释。通过您的回答,我了解如何在一台机器上设置具有多个经纪人的 Kakfa。连同 OneCricketeer 的回答,我现在可以成功设置具有 2 个节点/服务器(具有不同 ips)的 Kafka 集群。现在我可以在一个节点/服务器上生产,并在另一个节点/服务器上消费生产的信息。
  • 注意:你应该使用带有 kafka-topics 脚本的引导服务器而不是弃用的 Zookeeper 标志
猜你喜欢
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
相关资源
最近更新 更多