nginx整合kafak后,可以將nginx中的數據,直接保存到kafka中
就是給Nginx安裝一個kafka插件
操作步驟:
一:安裝git
yum install -y git
但是此種安裝git版本可能過低,會導致git clone操作使用,所以需要注意git的版本
二:下載kafka的c客戶端源碼
放在與nginx同一個父級目錄下
git clone https://github.com/edenhill/librdkafka
三:進入到librdkafka,然后進行編譯
yum install -y gcc gcc-c++ pcre-devel zlib-devel
./configure
make && make install
四:安裝nginx整合kafka的插件
git clone https://github.com/brg-liuwei/ngx_kafka_module
五:編譯Nginx,將插件一同進行編譯
./configure --add-module=/usr/local/src/ngx_kafka_module/
make
make install
六:修改Nginx的配置nginx.conf
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
kafka; kafka_broker_list kafka-01:9092 kafka-02:9092 kafka-03:9092;
server {
listen 80;
server_name nks_name;
location = /kafka/track { kafka_topic track; } location = /kafka/user { kafka_topic user; }
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
七:啟動zookeeper 和 kafka集群
/root/apps/zookeeper-3.4.9/bin/zkServer.sh start
/root/apps/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh -daemon /root/apps/kafka_2.11-0.10.2.1/config/server.properties
八:啟動nginx
/usr/local/nginx/sbin/nginx
如果啟動時報錯:
error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No such file or directory
表示找不到kafka.so.1的文件
解決方法:
echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig --需要執行的命令LDCONFIG
九:重啟Nginx服務
/usr/local/nginx/sbin/nginx -s reload
十:向nginx中寫入數據
curl localhost/kafka/track -d "hello world"
localhost表示本機,nginx的80端口
/kafka/track 表示nginx中配置的server -> location中的路徑 信息
十一:啟動消費者
在某一個kafka服務器上,啟動一個個消費者
/root/app/kafka_2.11-0.8.2.2/bin/kafka-console-consumer.sh --zookeeper zk-02:2181,zk-01:2181,zk-03:2181 --topic track --from-beginning
其中的track 對應 Location = kafka/track 中的track
十二:前端程序記錄日志(通過nginx記錄到kafka)
wx.request({ //用POST方式請求es可以只指定index和type,不用指定id url: "http://NginxLog-01/kafka/track", data: { time: new Date(), openid: openid, lat: lat, log: log }, method: "POST" })
