「持续更新中,欢迎关注...」数据库
做为一家专一于三维高精度地图服务的公司,内部有海量(PB级)的原始数据、中间数据、成功数据,须要存储、管理、并按期归档。json
)实现。主要实现功能:项目展现、上传、下载。网络
log_by_lua_file.lua:从Openresty获取文件信息,并发往Kafka架构
local cjson = require "cjson" local producer = require "resty.kafka.producer" local broker_list = { { host = "172.16.0.20", port = 9092 }, } function send_job_to_kafka() local log_json = {} local req_headers_ = ngx.req.get_headers() for k, v in pairs(req_headers_) do if k == "content-length" then log_json["contentLength"] = tostring(v) end if k == "u-id" then log_json["uId"] = tostring(v) end if k == "p-id" then log_json["pId"] = tostring(v) end end local resp_headers_ = ngx.resp.get_headers() for k, v in pairs(resp_headers_) do if k == "etag" then log_json["etag"] = string.gsub(v, "\"", "") break end end log_json["uri"] = ngx.var.uri log_json["host"] = ngx.var.host log_json["remoteAddr"] = ngx.var.remote_addr log_json["status"] = ngx.var.status local message = cjson.encode(log_json); ngx.log(ngx.ERR, "message is[", message, "]") return message end --local is_args = ngx.var.is_args local request_method = ngx.var.request_method local status_code = ngx.var.status -- 过滤Put Object成功的请求,记录相应的metadata及请求ID,并转发到kafka if request_method == "PUT" and status_code == "200" then local bp = producer:new(broker_list, { producer_type = "async" }) local ok, err = bp:send("ceph_lua_test", nil, send_job_to_kafka()) if not ok then ngx.log(ngx.ERR, "kafka send err:", err) return end ngx.log(ngx.ERR, "kafka send success:", ok) end