【安裝】
ngx_kafka_module網址:https://github.com/brg-liuwei/ngx_kafka_module
1、安裝git
yum install -y git
2、下載ngx_kafka_module依賴librdkafka(kafka的c客戶端源碼)
cd /usr/local/src
git clone https://github.com/edenhill/librdkafka
3、編譯與安裝ngx_kafka_module依賴librdkafka
cd /usr/local/src/librdkafka
./configure
make && make install
4、下載ngx_kafka_module
cd /usr/local/src
git clone https://github.com/brg-liuwei/ngx_kafka_module
5、下載nginx,本次下載的nginx版本為:nginx-1.18.0.tar.gz 下載地址
6、上傳至服務器並解壓:tar -zxvf nginx-1.18.0.tar.gz -C /usr/local
7、編譯nginx
cd cd /usr/local/nginx-1.18.0/
./configure --add-module=/usr/local/src/ngx_kafka_module
8、安裝nginx
make && make install
9、將nginx添加到環境變量。編輯/etc/profile,在末尾加上如下內容
export NGINX_HOME=/usr/local/nginx
export PATH=$PATH:$NGINX_HOME/sbin
source /etc/profile
10、啟動nginx:nginx
如果啟動報如下錯誤
nginx: error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No such file or directory
則需要添加so庫
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
【使用】
1、啟動kafka
2、創建主題
kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic tp_ngx_kafka --partitions 1 --replication-factor 1
3、修改nginx配置文件
編輯nginx.conf文件(vim /usr/local/nginx/conf/nginx.conf),在http模塊內添加如下內容
kafka;
#kafka broker地址,多個地址以空格分隔開,替換成自己的broker地址
kafka_broker_list 192.168.3.52:9092;
include /usr/local/nginx/conf/conf.d/*.conf;
創建conf.d文件夾:mkdir /usr/local/nginx/conf/conf.d
創建ngx-kafka-module.conf文件(vim /usr/local/nginx/conf/conf.d/ngx-kafka-module.conf),添加如下內容
server { listen 80;
#監聽的域名,替換成自己的域名 server_name kafka.test.com; location / { kafka_topic tp_ngx_kafka; } }
4、重新加載nginx配置文件
nginx -s reload
至此,ngx-kafka-module配置完成,下面我們做個示例,來演示
5、編寫html文件(index.html)。(注入引入jquery,這里我就不貼了,注意修改請求地址)

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>職位瀏覽</title> <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script> </head> <body> <table> <tr> <th>職位</th> <th>企業</th> <th>薪資</th> <th>操作</th> </tr> <tr> <td>開發</td> <td>阿里</td> <td>10000</td> <td> <button onclick="operation('A001', 'click')">點擊</button> <button onclick="operation('A001', 'job_collect')">收藏</button> <button onclick="operation('A001', 'cv_send')">投遞簡歷</button> <button onclick="operation('A001', 'cv_upload')">上傳簡歷</button> </td> </tr> <tr> <td>開發</td> <td>騰訊</td> <td>20000</td> <td> <button onclick="operation('A002', 'click')">點擊</button> <button onclick="operation('A002', 'job_collect')">收藏</button> <button onclick="operation('A002', 'cv_send')">投遞簡歷</button> <button onclick="operation('A002', 'cv_upload')">上傳簡歷</button> </td> </tr> <tr> <td>開發</td> <td>拉勾</td> <td>30000</td> <td> <button onclick="operation('A003', 'click')">點擊</button> <button onclick="operation('A003', 'job_collect')">收藏</button> <button onclick="operation('A003', 'cv_send')">投遞簡歷</button> <button onclick="operation('A003', 'cv_upload')">上傳簡歷</button> </td> </tr> </table> </body> <script> function operation(job_code,action) { $.ajax({ url: 'http://kafka.test.com/', type: 'POST', contentType: 'application/json;charset=utf-8', dataType: 'json', data:{ user_id:101, act_time: new Date().getTime(), action:action, job_code:job_code }, success: function (data) { } }) } </script> </html>
6、上傳index.html到服務器
#創建h5目錄
mkdir -p /www/wwwroot/kafka
cd /www/wwwroot/kafka
#上傳文件
rz -y
7、配置nginx
vim /usr/local/nginx/conf/conf.d/h5-test.conf
server { listen 80; server_name h5.test.com; location / { root /www/wwwroot/kafka/; index index.html; } }
nginx -s reload
8、訪問h5.test.com
點擊按鈕,跨域了
9、解決跨域問題
編輯ngx-kafka-module.conf文件(vim /usr/local/nginx/conf/conf.d/ngx-kafka-module.con),在location模塊下添加如下內容
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET,POST'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
nginx重新加載配置文件:nginx -s reload
10、啟動kafka控制台消費者
kafka-console-consumer.sh --bootstrap-server 192.168.3.52:9092 --topic tp_ngx_kafka
11、頁面點擊按鈕,在kafka控制台收到消息
至此驗證完畢