用例是这样的:我运行了几个java应用程序,它们都必须与不同的(每个都有一个特定的目标)elasticsearch索引交互。例如,应用程序a使用elasticsearch的索引a、b、c进行查询和更新。应用程序b使用索引a、c、d(例如)。
需要一些公共接口来管理所有这些数据流。目前我正在为此评估Kafka和弗伦特。有人能解释一下哪个更适合这种情况吗。我看过Kafka和弗伦特的特点,但我不太明白这两者之间的区别。谢谢。
用例是这样的:我运行了几个java应用程序,它们都必须与不同的(每个都有一个特定的目标)elasticsearch索引交互。例如,应用程序a使用elasticsearch的索引a、b、c进行查询和更新。应用程序b使用索引a、c、d(例如)。
需要一些公共接口来管理所有这些数据流。目前我正在为此评估Kafka和弗伦特。有人能解释一下哪个更适合这种情况吗。我看过Kafka和弗伦特的特点,但我不太明白这两者之间的区别。谢谢。
2条答案
按热度按时间92vpleto1#
来自:数据管道的生命之血
Kafka主要与保存日志数据有关,而不是移动日志数据。因此,Kafka生产者需要编写代码将数据放入Kafka,而Kafka消费者需要编写代码将数据从Kafka中取出。
fluentd为kafka提供了输入和输出插件,这样数据工程师就可以编写更少的代码来进出kafka。我们有许多用户使用fluentd作为Kafka的生产者和/或消费者。
63lcw9qa2#
kafka将发布/订阅消息作为分布式提交日志提供。通常,您在需要生成一些数据转发到其他地方的每个主机上安装kafka,所有这些主机将一起形成一个集群。这里的好处是,如果由于某种原因网络连接变得不稳定或中断,您的应用程序可以继续生成数据/日志,并且不会丢失它们。然而,如果您的应用程序直接将日志发送到某个远程集中式日志主机,则在网络中断期间可能会丢失一些日志。
fluentd是一个集中式日志收集器,通常安装在一台主机上(如果需要水平扩展,则安装在多台主机上)。它连接到远程数据源,应用过滤,并将统一的日志数据发送到远程数据接收器。
从fluentd文档中,您可以看到fluentd可以使用来自kafka的数据,也可以向kafka生成数据。仅此一点就应该暗示,弗伦特和Kafka在不同的层面上,因为前者使用后者。
实际上比较fluentd和logstash更符合逻辑。就fluentd而言,kafka只是另一个数据源和/或数据汇,但它们完全不同。
如果你想两全其美,可以使用kafka作为从应用程序到应用程序的输入/输出数据管道,使用fluentd(或logstash)作为你的集中式日志系统来读取这些kafka主题。
如果你想读更多关于这个主题的文章,你可以读到fluentd和kafka是如何很好地互补的,读到他们不是在互相竞争。