Fluentd 与卡夫卡

Fluentd vs Kafka

用例是这样的: 我有几个 java 应用程序 运行,它们都必须与不同的(每个都有特定的目标)elasticsearch 索引交互。例如应用程序 A 使用 ElasticSearch 的索引 A、B、C 进行查询和更新。应用程序 B 使用索引 A、C、D(比方说)。

需要一些通用接口来管理所有这些数据流。目前我正在为此评估 Kafka 和 fluentd。 有人可以解释哪种更适合这种情况。我看过 Kafka 和 Fluentd 的功能,但我不太了解它在这里会产生什么不同。 非常感谢。

kafka 提供 publish/subscribe 消息作为分布式提交日志。通常你在每台主机上安装 kafka,你需要生成一些数据转发到其他地方,所有这些主机将一起形成一个集群。这里的好处是,如果由于某种原因网络连接变得不稳定或出现故障,您的应用程序可以继续生成 data/logs 而它们不会丢失。而如果您的应用程序直接将日志发送到某个远程集中式日志记录主机,您可能会在网络出现故障时丢失一些日志。

fluentd 是一个 集中式 日志收集器,通常安装在一台主机上(如果需要水平扩展,则安装更多)。它连接到 remote 数据源,应用过滤并将统一的日志数据发送到 remote 数据接收器。

从 fluentd 文档中,您可以看到 fluentd 也可以 consume data from kafka and produce data towards kafka。仅这一点就应该暗示 fluentd 和 kafka 在不同的层上,因为前者使用后者。

实际上 compare fluentd and logstash 更符合逻辑。就 fluentd 而言,kafka 只是另一个数据源 and/or 数据接收器,但它们完全是不同的野兽。

如果您想两全其美,请使用 kafka 作为 input/output 数据管道 from/to 您的应用程序,并使用 fluentd(或 logstash)作为您的集中式日志记录系统,从这些 kafka 主题中读取数据。

如果你想阅读更多关于该主题的内容,你可以阅读 fluentd and kafka complement each other 非常好,阅读它们不是相互竞争的。

发件人:The Life Blood Of Your Data Pipeline

Kafka is primarily related to holding log data rather than moving log data. Thus, Kafka producers need to write the code to put data in Kafka, and Kafka consumers need to write the code to pull data out of Kafka.

Fluentd has both input and output plugins for Kafka so that data engineers can write less code to get data in and out of Kafka. We have many users that use Fluentd as a Kafka producer and/or consumer.