用例是这样的: 我运行了几个java应用程序,它们都必须与不同的(每个都有一个特定的目标)elasticsearch索引进行交互。例如,应用程序A使用ElasticSearch的索引A,B,C来查询和更新。应用B使用指数A,C,D(比如说)。
需要一些可以管理所有这些数据流的通用接口。目前我正在评估卡夫卡,并为此目的流利。 有人可以解释哪种更适合这种情况。我已经看过Kafka和Fluentd的特点了,我真的不明白它在这里会有什么不同。 非常感谢。
答案 0 :(得分:44)
kafka将发布/订阅消息传递作为分布式提交日志提供。通常,您需要在每个主机上安装kafka,您需要在其中生成一些要转发的数据,并且所有这些主机将一起形成一个群集。这里的好处是,如果由于某种原因网络连接变得不稳定或出现故障,您的应用程序可以继续生成数据/日志,并且它们不会丢失。如果您的应用程序直接将日志发送到某个远程集中式日志记录主机,则在网络出现故障时可能会丢失一些日志。
fluentd是一个集中式日志收集器,通常安装在一台主机上(如果需要水平扩展,则更多)。它连接到远程数据源,应用过滤并将统一日志数据发送到远程数据接收器。
从流利的文档中,您可以看到流利的人也可以consume data from kafka和produce data towards kafka。仅此一点就应该暗示流利和卡夫卡在不同的层面,因为前者使用后者。
compare fluentd and logstash实际上更符合逻辑。就流利而言,kafka只是另一个数据源和/或数据接收器,但它们完全是不同的动物。
如果您想要两全其美,请使用kafka作为来自/到您的应用程序的输入/输出数据管道,并使用流利(或logstash)作为您的集中式日志记录系统,从这些kafka主题中读取。
如果您想了解有关该主题的更多信息,您可以非常了解fluentd and kafka complement each other的内容,并了解它们之间没有相互竞争。
答案 1 :(得分:1)
来自:The Life Blood Of Your Data Pipeline
Kafka主要与保存日志数据而不是移动日志有关 数据。因此,Kafka生产者需要编写代码来放入数据 Kafka和Kafka的消费者需要编写代码来提取数据 卡夫卡。
Fluentd为Kafka提供了输入和输出插件,以便获得数据 工程师可以编写更少的代码来获取进出Kafka的数据。我们有 许多使用Fluentd作为Kafka制作人和/或消费者的用户。