kafka-logger plugin for Apache APISIX Skill for configuring the Apache APISIX kafka-logger plugin via the a6 CLI. Covers pushing access logs to Apache Kafka topics, broker configuration, SAS…
The kafka-logger plugin pushes request/response logs to Apache Kafka
topics. It supports multiple brokers, SASL authentication, async/sync
producing, custom log formats, and batch processing for efficient delivery.
Stream access logs to Kafka for downstream processing
Feed real-time API analytics pipelines
Integrate with Kafka-based logging infrastructure
Need SASL-authenticated Kafka clusters
Field Type Required Default Description brokersarray Yes — Kafka broker list brokers[].hoststring Yes — Broker hostname or IP brokers[].portinteger Yes — Broker port (1-65535) kafka_topicstring Yes — Target Kafka topic keystring No — Partition key for routing timeoutinteger No 3Connection timeout in seconds
Field Type Required Default Description brokers[].sasl_configobject No — SASL config per broker brokers[].sasl_config.mechanismstring No "PLAIN"PLAIN, SCRAM-SHA-256, or SCRAM-SHA-512brokers[].sasl_config.userstring Yes* — SASL username (*if sasl_config set) brokers[].sasl_config.passwordstring Yes* — SASL password (*if sasl_config set)
Field Type Default Description producer_typestring "async"async (batched) or sync (immediate)required_acksinteger 11 (leader ack) or -1 (all replicas)producer_batch_numinteger 200Messages per Kafka batch producer_batch_sizeinteger 1048576Batch size in bytes (1MB) producer_max_bufferinginteger 50000Max buffered messages producer_time_lingerinteger 1Flush interval in seconds meta_refresh_intervalinteger 30Kafka metadata refresh in seconds cluster_nameinteger 1Cluster identifier (for multi-cluster)
Field Type Default Description meta_formatstring "default"default (JSON) or origin (raw HTTP)log_formatobject — Custom log format with $variable syntax include_req_bodyboolean falseInclude request body include_req_body_exprarray — Conditional request body logging include_resp_bodyboolean falseInclude response body include_resp_body_exprarray — Conditional response body logging max_req_body_bytesinteger 524288Max request body size to log (512KB) max_resp_body_bytesinteger 524288Max response body size to log (512KB)
Field Type Default Description batch_max_sizeinteger 1000Max entries per batch inactive_timeoutinteger 5Seconds before flushing incomplete batch buffer_durationinteger 60Max age of oldest entry max_retry_countinteger 0Retry attempts on failure retry_delayinteger 1Seconds between retries
a6 route create -f - << 'EOF'
{
"id": "kafka-logged-api",
"uri": "/api/*",
"plugins": {
"kafka-logger": {
"brokers": [
{"host": "kafka-1", "port": 9092},
{"host": "kafka-2", "port": 9092}
],
"kafka_topic": "apisix-logs",
"batch_max_size": 100
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"backend:8080": 1
}
}
}
EOF
kafka-console-consumer --bootstrap-server kafka-1:9092 --topic apisix-logs --from-beginning
{
"plugins" : {
"kafka-logger" : {
"brokers" : [
{
"host" : "kafka.example.com" ,
"port" : 9092 ,
"sasl_config" : {
"mechanism" : "SCRAM-SHA-256" ,
"user" : "apisix" ,
"password" : "secret"
}
}
],
"kafka_topic" : "api-logs" ,
"required_acks" : -1
}
}
}
{
"plugins" : {
"kafka-logger" : {
"brokers" : [{ "host" : "kafka" , "port" : 9092 }],
"kafka_topic" : "api-logs" ,
"log_format" : {
"@timestamp" : "$time_iso8601" ,
"client_ip" : "$remote_addr" ,
"method" : "$request_method" ,
"uri" : "$request_uri" ,
"status" : "$status" ,
"latency" : "$request_time" ,
"upstream" : "$upstream_addr"
}
}
}
}
{
"plugins" : {
"kafka-logger" : {
"brokers" : [{ "host" : "kafka" , "port" : 9092 }],
"kafka_topic" : "api-logs" ,
"key" : "$route_id"
}
}
}
{
"plugins" : {
"kafka-logger" : {
"brokers" : [
{ "host" : "kafka-1" , "port" : 9092 },
{ "host" : "kafka-2" , "port" : 9092 },
{ "host" : "kafka-3" , "port" : 9092 }
],
"kafka_topic" : "api-logs" ,
"producer_type" : "async" ,
"producer_batch_num" : 500 ,
"producer_batch_size" : 2097152 ,
"producer_max_buffering" : 100000 ,
"producer_time_linger" : 2 ,
"batch_max_size" : 5000 ,
"inactive_timeout" : 10 ,
"required_acks" : 1
}
}
}
{
"plugins" : {
"kafka-logger" : {
"brokers" : [{ "host" : "kafka" , "port" : 9092 }],
"kafka_topic" : "raw-logs" ,
"meta_format" : "origin"
}
}
}
Produces raw HTTP request text instead of JSON.
version : "1"
routes :
- id : kafka-logged-api
uri : /api/*
plugins :
kafka-logger :
brokers :
- host : kafka-1
port : 9092
- host : kafka-2
port : 9092
kafka_topic : apisix-logs
producer_type : async
required_acks : 1
batch_max_size : 200
inactive_timeout : 5
upstream_id : my-upstream
Symptom Cause Fix No messages in Kafka Broker unreachable Verify broker host/port; check firewall SASL auth failure Wrong credentials or mechanism Verify user/password; ensure mechanism matches Kafka config Messages delayed Large batch/timeout settings Reduce inactive_timeout and producer_time_linger Messages dropped Buffer overflow Increase producer_max_buffering; add more brokers Topic not found Topic doesn't exist and auto-create disabled Create topic manually or enable auto.create.topics.enable High latency required_acks: -1 with slow replicasUse required_acks: 1 for lower latency (less durability)
This page is generated from a6-plugin-kafka-logger/SKILL.md in the api7/a6 repository. Browse all skills on the AI Agent Skills page.