我正在从他们的快速入门教程中学习apache kafka:http://kafka.apache.org/documentation.html#quickstart. 到目前为止,我已经做了如下设置。生产者节点,其中web服务器在端口8888处运行。另一个节点上的kafka服务器(代理)、使用者和zookeeper示例。我已经用3个分区测试了默认的支持控制台/文件的生产者和消费者。这个设置非常完美,我可以看到我按照创建的顺序发送的消息(每个分区中都有)。
现在,我想把从web服务器生成的日志发送给kafka代理。消费者稍后将处理这些消息。目前我正在使用syslog ng将服务器日志捕获到一个文本文件中。关于如何实现producer使用kafka进行日志聚合,我提出了3个粗略的想法
生产者实施
**第一种:**监听syslog ng的tcp端口。获取每条消息并发送到kafka服务器。这里我们有两个中间进程:producer和syslog ng
**第二种:**使用syslog ng作为生产者。应该找到一种方法将消息发送到kafka服务器,而不是写入文件。syslog ng,生产者是中间进程。
**第三种:*将Web服务器本身配置为生产者。
我的想法正确吗。在最后一种情况下,我们没有任何中间过程。但我怀疑它的实现是否会影响服务器性能。有谁能告诉我使用apachekafka的最佳方法(如果以上3种方法都不好的话)并指导我正确配置服务器?。。
p、 答:我正在使用node.js作为我的web服务器
谢谢,
萨拉特
1条答案
按热度按时间atmip9wb1#
由于您指定希望将生成的日志发送到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提供的console producer)。这通常是一个很好的方法,因为它完全消除了kafka和web服务器之间的依赖关系(将生产者嵌入其中需要错误处理、配置等)。它需要使用tail-follow,它对我们非常有用。如果你想知道更多的细节,我也可以包括在内。不过,您仍然需要监督kafka的执行,以确保消息不会丢失(并提供一个恢复选项来脱机发送失败的消息)。但是,这种方法的优点是,工具之间没有依赖关系。
希望对你有帮助。。。
伊兰