nginx-lua-kafka

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)

 

转载于:https://my.oschina.net/qiongtaoli/blog/1577915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值