cd /usr/local/openresty/lualib
wget https://github.com/doujiang24/lua-resty-kafka/archive/master.zip
unzip master.zip
lua-resty-kafka-master/ kafka
cp -a lib/resty .
nginx.conf
http {
lua_package_path "/usr/local/openresty/lualib/kafka/?.lua;;";
server {
log_by_lua '
-- 引入lua所有api
local cjson = require "cjson"
local producer = require "resty.kafka.producer"
-- 定义kafka broker地址,ip需要和kafka的host.name配置一致
local broker_list = {
{ host = "127.0.0.1", port = 9092 },
}
-- 定义json便于日志数据整理收集
local log_json = {}
log_json["uri"]=ngx.var.uri
log_json["args"]=ngx.var.args
log_json["host"]=ngx.var.host
log_json["request_body"]=ngx.var.request_body
log_json["remote_addr"] = ngx.var.remote_addr
log_json["remote_user"] = ngx.var.remote_user
log_json["time_local"] = ngx.var.time_local
log_json["status"] = ngx.var.status
log_json["body_bytes_sent"] = ngx.var.body_bytes_sent
log_json["http_referer"] = ngx.var.http_referer
log_json["http_user_agent"] = ngx.var.http_user_agent
log_json["http_x_forwarded_for"] = ngx.var.http_x_forwarded_for
log_json["upstream_response_time"] = ngx.var.upstream_response_time
log_json["request_time"] = ngx.var.request_time
-- 转换json为字符串
local message = cjson.encode(log_json);
-- 定义kafka异步生产者
local bp = producer:new(broker_list, { producer_type = "async" })
local ok, err = bp:send("test", nil, message)
if not ok then
ngx.log(ngx.ERR, "kafka send err:", err)
return
end
';
}
}
test-consumer.js
const kafka = require('kafka-node');
const options = {
host: '127.0.0.1:2181',
groupId: 'test100',
sessionTimeout: 15000,
autoCommit: true,
};
const consumer = new kafka.ConsumerGroup(options, 'test100');
consumer.on('message', async (message) => {
console.log(message);
});
test-producer.js
const kafka = require('kafka-node');
let client = new kafka.Client('127.0.0.1:2181');
let producer = new kafka.Producer(client);
let payloads = [
{topic: 'test100', messages: 'time is ' + (new Date().getTime())},
];
producer.on('ready', function() {
producer.send(payloads, (err, data) => {
console.log(err, data);
});
});
问题:
docker nginx error.log:
[lua] producer.lua:258: buffered messages send to kafka err: no resolver defined to resolve
解决:
vim /usr/local/openresty/lualib/kafka/resty/kafka/producer.lua +141
broker_conf.host = "127.0.0.1"
local bk, err = broker:new(broker_conf.host, broker_conf.port, self.socket_config)