带2个Kafka输出的filebeat

w1jd8yoj  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(1232)

当我试图同时向2个kafka节点发送数据日志时,我遇到了一个filebeat问题
以下是filebeat.yml文件的输出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获取数据文件beat发送了它。
如果我交换ip地址,第二个ip地址就会得到数据日志。
为什么会这样?实现这个用例还需要哪些配置?我需要把数据发送到Kafka的两个输出端。

lnvxswe2

lnvxswe21#

假设两个代理url构成同一个集群,则只使用一个地址引导集群的其余部分。如果其中一个地址不可访问,则选择另一个地址。
如果filebeat正在创建具有空键的消息,那么消息应该均匀地分布在所连接到的集群的指定kafka主题内的分区中。
数据只发送到计算分区的前导(基于消息键),因此单个消息不能同时发送到“两个节点(同一集群的)。另外,若您在kafka集群中有两个以上的服务器,那个获取数据的服务器可能不是您列出的地址的一部分。
我认为filebeat不能同时输出到多个独特的kafka集群,至少不能在一个集群内输出 output.kafka 部分。logstash可能更适合该用例

w46czmvw

w46czmvw2#

正如cricket\u007所解释的,主机数组应该只包含来自同一kafka集群的节点,因为它们用于引导到集群的连接。boostraping基本上是通过提供集群的一个、一些或所有节点的地址来工作的,这样kafka生产者就可以接收描述kafka集群的蓝图(元数据)。
此外,当你说你在其中一个节点上看不到你的信息时,我感觉它们不是同一个Kafka集群的一部分。如果你说你看不到你的数据是因为你试图从你的“另一个”服务器上的一个主题消费,如果他们是同一个集群的一部分,你无论如何都可以消费它,即使在这个特定的节点上没有分区(领头或副本)。
当您消费时,您的消费者连接到zk并获取集群元数据,因此它连接到正确的节点/分区,允许您从kafka主题消费,因此它实际上并不取决于您运行消费者的机器。
所以这个答案假设你真的想把你的信息传递给不同的Kafka集群。
在本例中,由于filebeat不支持同一输出类型的多个输出块,因此可以使用我所知的将kafka镜像到kafka的最简单解决方案:https://docs.confluent.io/current/connect/kafka-connect-replicator/index.html
通过复制,您可以获得相同的结果,但不是让您的filebeat发送到两个kafka集群,而是只发送到一个,然后将您的主题镜像到第二个kafka集群。

相关问题