5

我正在从他们的快速入门教程中学习 Apache Kafka:http: //kafka.apache.org/documentation.html#quickstart。到目前为止,我已经完成了如下设置。一个生产者节点,其中一个 Web 服务器在端口 8888 上运行。另一个节点上的 Kafka 服务器(代理)、消费者和 Zookeeper 实例。我已经用 3 个分区测试了默认的控制台/文件启用的生产者和消费者。设置是完美的,我可以看到我按照他们创建的顺序发送的消息(在每个分区中)。

现在,我想将从 Web 服务器生成的日志发送到 Kafka Broker。这些消息将由消费者稍后处理。目前我正在使用 syslog-ng 将服务器日志捕获到文本文件中。关于如何实现生产者使用kafka进行日志聚合,我想出了3个粗略的想法

Producer Implementations

First Kind: 监听 syslog-ng 的 tcp 端口。获取每条消息并发送到 kafka 服务器。这里我们有两个中间进程:Producer 和 syslog-ng
第二类:使用 syslog-ng 作为 Producer。应该找到一种将消息发送到 Kafka 服务器而不是写入文件的方法。syslog-ng,生产者是中间进程。
第三种:将网络服务器本身配置为生产者。

我的想法是否正确。在最后一种情况下,我们没有任何中间过程。但我怀疑它的实现会影响服务器性能。谁能告诉我使用 Apache Kafka 的最佳方法(如果上述 3 种不好)并指导我进行适当的服务器配置?..

PS:我正在为我的网络服务器使用 node.js

谢谢,
萨拉特

4

1 回答 1

2

由于您指定希望将生成的日志发送到 kafka 代理,因此确实看起来好像执行一个进程来侦听和重新发送消息主要会创建另一个没有附加价值的故障点(除非您需要特定的 syslog-ng 功能)。

Syslog-ng 可以使用以下方式向外部应用程序发送消息: http ://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.4-guides/en/syslog-ng-ose-v3.4 -guide-admin/html/configuring-destinations-program.html。我不知道是否还有其他方法可以做到这一点。

对于第三个选项,我不确定 kafka 是否可以轻松集成到 Node.js 中,因为它需要一个 c++ 生产者,而当我上次寻找时,我找不到。但是,一个简单的替代方法可能是让 kafka 读取服务器创建的日志文件并发送这些日志(使用 kafka 提供的控制台生产者)。这通常是一个好方法,因为它完全消除了 kafka 和 Web 服务器之间的依赖关系(嵌入生产者需要错误处理、配置等)。它需要使用 tail --follow 并且对我们非常有效。如果您希望获得更多详细信息,我也可以将它们包括在内。您仍然需要监督 kafka 执行以确保消息不会丢失(并提供恢复选项以离线发送失败的消息)。但,

希望能帮助到你...

伊兰

于 2013-09-17T14:52:13.957 回答