Kafka记录Nginx的POST请求
最近因为工作原因,需要将Nignx的POST请求数据实时采集到Kafka中。最容易的想到的方案就是通过"tail -f" Nginx的log日志到Kafka的Broker集群中,但是这种方案效率、吞吐量都很低,完全无法满足业务上的需要。所以如果能直接在Nginx中获取到POST请求数据,并调用Kafka的API接口将数据直接写入到Kafka集群中,是最完美的解决方法了。但是此种方案存在一个难点啊,就是要写一个Nginx模块,由于刚开始接触Nginx,这块不是很熟。只能借助万能Google了,输入关键字“Nginx Kafka”,没想到还真找到一个开源的Nginx模块(ngx_kafka_module),心中万分高兴,本来以为拿来就能用呢,通读代码才发现,它只能将POST请求发给一个Broker,不能借助Zookeeper的集群管理功能,让zookeeper自动帮助选一个Broker。没有办法了,只能自己动手修改一下了。首先从了解编写Nginx模块的步骤入手,找到淘宝开源的"Nginx开发从入门到精通"电子书,这里要赞一下,果然是对Nginx有深入了解,要不也不能写出这么深入浅出的书。在了解了编写步骤后,开始对ngx_kafka_module着手进行改造,在ngx_kafka_module里增加了一个“kafka.broker.list”的main配置项和一个全局变量(g_broker_list)用于记录nginx.conf配置文件中kafka.broker.list的值,并在该模块初始化时,用此全局变量设置kafka_conf的“metadata.broker.list”属性,然后用此kafka_conf初始化一个生产者。这样当每来一个POST请求时,就是可通过此生产者将POST消息发送到相应的topic。
Kafka记录Nginx的POST请求的更多相关文章
- nginx记录响应与POST请求日志
生产环境中的某些api出现故障,但是问题无法重现,但是又很想解决掉问题以及我们新项目上线,需要跟踪请求与响应的信息,可以预先找到一些bug,减少大面积的损失. 安装nginx与ngx_lua 响应日志 ...
- 【Nginx】HTTP请求的11个处理阶段
Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...
- 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段
Nginx 处理一个 HTTP 请求的全过程 前面给大家讲了 Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了.先看下面这张图,这张图是 Nginx 处理 HT ...
- Nginx如何处理一个请求
看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...
- Apache与Nginx对客户端请求的处理机制对比
Apache与Nginx对客户端请求的处理机制对比 模块 大致为四个模块,核心模块.HTTP模块.邮件模块,以及第三方模块 核心模块主要包含两类功能的支持,一类是主体功能,包括进程管理,权限管理,错误 ...
- [转载]Nginx如何处理一个请求
http://nginx.org/cn/docs/http/request_processing.html 对我的扫盲文章 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一 ...
- Nginx配置TCP请求转发
Nginx配置TCP请求转发 1.TCP请求转发基于stream在1.9版本前,需要单独编译安装该组建: # 依赖服务 [root@baolin conf]#yum -y install pcre-d ...
- nginx学习笔记(7)Nginx如何处理一个请求---转载
如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...
- Nginx记录-Nginx介绍
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 ...
随机推荐
- 教Alexa看懂手语,不说话也能控制语音助手
Alexa.Siri.小度……各种语音助手令人眼花缭乱,但这些设备多是针对能力健全的用户,忽略了听.说能力存在障碍的人群.本文作者敏锐地发现了这一 bug,并训练亚马逊语音助手 Alex 学会识别美式 ...
- mysql 更新(九) pymysql模块的使用
16-pymysql模块的使用 本节重点: pymysql的下载和使用 execute()之sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetch ...
- OMIM 表型和基因如何关联
OMIM数据库:大神私藏的数据库,99.9%的人都不知道! 2019-03-04 11:00乳腺癌/医生/肺癌 “ GEO.NCDB.TCGA.SEER数据库这些我都知道,但OMIM是什么鬼? OMI ...
- c#面向对象基础3
静态与非静态的区别 (1)在非静态类中既可以有实例成员,也可以有静态成员(static修饰). (2)在调用静态成员的时候要使用:对象名.实例成员. (3)在调用静态成员的时候要使用:类名.静态成员. ...
- scala.XML处理
XML scala提供了对xml字面量的内建支持,我们可以很容易的在程序代码中生成xml片段, scala类库也包含了对xml常用处理的支持 有时候scala会错误识别出xml字面量 如x < ...
- JAVA WebSocKet ( 实现简单的前后端即时通信 )
1, 前端代码 HTML5 部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- leetcode344
public class Solution { public string ReverseString(string s) { var list = s.Reverse(); StringBuilde ...
- 奇技淫巧:在spring官网上下载历史版本的spring插件,springsource-tool-suite
转自:https://blog.csdn.net/PacosonSWJTU/article/details/80959689 目前spring官网(http://spring.io/tools/sts ...
- 前端-CSS-11-Z-index
---- z-index 这个东西非常简单,它有四大特性,每个特性你记住了,页面布局就不会出现找不到盒子的情况. z-index 值表示谁压着谁,数值大的压盖住数值小的, 只有定位了的元素,才能有z- ...
- HTML 求阶乘之和
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...