当我尝试同时向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获取数据的Filebeat才发送了它。
如果我交换IP地址,发生第二个IP地址获取数据记录。
为什么会发生这种情况?还需要哪些其他配置来实现此用例?我需要将数据发送到两个kafka输出。
发布于 2018-11-17 06:36:15
假设两个代理urls来自同一个集群,则只有一个地址用于引导集群的其余部分。如果其中一个地址不可达,则选择另一个地址。
如果Filebeat正在创建具有空键的消息,那么消息应该均匀分布在要连接到的集群的指定kafka主题内的分区中。
数据只会发送给计算分区的leader (根据消息键),因此不能同时将一条消息发送给(同一集群的)两个节点。此外,如果您在Kafka集群中有两台以上的服务器,则获取数据的服务器可能不是您列出的地址的一部分。
我不认为Filebeat可以一次输出到多个唯一的Kafka集群,至少不能在单个output.kafka部分中输出。Logstash可能更适用于该用例
发布于 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集群。
https://stackoverflow.com/questions/53345646
复制相似问题