首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有2个kafka输出的文件节拍

带有2个kafka输出的文件节拍
EN

Stack Overflow用户
提问于 2018-11-17 05:28:04
回答 2查看 1.6K关注 0票数 0

当我尝试同时向2个Kafka节点发送数据日志时,Filebeat出现问题

以下是filebeat.yml文件的输出Kafka部分:

代码语言:javascript
复制
output.kafka:
  enabled: true
  hosts: [ "192.168.xxx.xx:9092", "192.168.zzz.zz:9092" ]
  topic: "syslog"
  timeout: 30s
  max_message_bytes: 1000000

两个kafka服务都在运行,但只有第二个节点获取数据。我的意思是只有Kafka节点192.168.zzz.zz获取数据的Filebeat才发送了它。

如果我交换IP地址,发生第二个IP地址获取数据记录。

为什么会发生这种情况?还需要哪些其他配置来实现此用例?我需要将数据发送到两个kafka输出。

EN

回答 2

Stack Overflow用户

发布于 2018-11-17 06:36:15

假设两个代理urls来自同一个集群,则只有一个地址用于引导集群的其余部分。如果其中一个地址不可达,则选择另一个地址。

如果Filebeat正在创建具有空键的消息,那么消息应该均匀分布在要连接到的集群的指定kafka主题内的分区中。

数据只会发送给计算分区的leader (根据消息键),因此不能同时将一条消息发送给(同一集群的)两个节点。此外,如果您在Kafka集群中有两台以上的服务器,则获取数据的服务器可能不是您列出的地址的一部分。

我不认为Filebeat可以一次输出到多个唯一的Kafka集群,至少不能在单个output.kafka部分中输出。Logstash可能更适用于该用例

票数 3
EN

Stack Overflow用户

发布于 2018-11-20 23:27:27

正如cricket_007解释的那样,该主机阵列应该只包含来自同一kafka集群的节点,因为它们用于引导您到集群的连接。引导基本上是通过提供集群的一个、部分或所有节点的地址来工作的,这样kafka生产者就可以接收描述kafka集群的蓝图(元数据)。

此外,当你说你在其中一个节点上看不到你的消息时,我感觉它们不是同一个kafka集群的一部分。如果你说你不能看到你的数据,因为你试图消费来自你的“其他”服务器上的一个主题,如果他们是同一集群的一部分,你无论如何都可以使用它,即使在那个特定的节点上没有分区(领导者或副本)。

当你消费时,你的消费者连接到ZK并获得集群元数据,所以它连接到正确的节点/分区,允许你从kafka主题消费,所以它实际上不依赖于你运行消费者的机器。

所以这个答案假设你真的想把你的消息发送到不同的集群。

在本例中,由于filebeat不支持同一输出类型的多个输出块,因此您可以使用我所知的将kafka镜像到kafka的最简单的解决方案之一:https://docs.confluent.io/current/connect/kafka-connect-replicator/index.html

通过复制,您可以获得相同的结果,但不是让您的文件节拍发送到两个kafka集群,而是只发送一个,然后将您的主题镜像到第二个kafka集群。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53345646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档