具有2个kafka输出的Filebeat

时间:2018-11-16 21:28:04

标签: apache-kafka filebeat

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

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

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输出。

2 个答案:

答案 0 :(得分:2)

假设两个代理url组成同一个集群,则仅使用一个地址来引导其余集群。如果其中一个地址不可达,则选择另一个。

如果Filebeat正在使用空键创建消息,则消息应在要连接的群集的指定kafka主题内的各个分区之间均匀分布。

数据仅发送到计算出的分区的领导者(基于消息键),因此,单个消息无法同时发送到“(同一集群的)两个节点”。另外,如果您在Kafka群集中拥有的服务器多于这两个服务器,则获取数据的服务器可能不是您列出的那些地址的一部分。

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

答案 1 :(得分:0)

如cricket_007所述,该主机阵列应仅包含来自同一kafka群集的节点,因为它们用于引导您与该群集的连接。提升处理基本上是通过提供集群的一个,一些或所有节点的地址来起作用的,以便卡夫卡生产者可以接收描述该卡夫卡集群的蓝图(元数据)。

此外,当您说无法在其中一个节点上看到消息时,我感到它们不属于同一kafka群集。如果您说由于尝试从“其他”服务器上的主题进行消费而看不到数据,那么即使它们没有属于同一分区(领导者或副本),如果它们属于同一群集,您仍然可以使用它)出现在该特定节点上。

使用时,使用方将连接到ZK并获取集群元数据,以便它连接到正确的节点/分区,从而允许您从kafka主题进行使用,因此实际上并不依赖于运行您的计算机的消费者。

因此,此答案假设您确实要向不同的kafka群集生成消息。

在这种情况下,由于filebeat不支持相同输出类型的多个输出块,因此可以使用我所知道的最简单的解决方案之一来镜像kafka-to-kafka: https://docs.confluent.io/current/connect/kafka-connect-replicator/index.html

通过复制,您可以实现相同的结果,但是您可以将文件信号发送到两个kafka群集,而只发送到一个,然后将主题镜像到另一个kafka群集。