madhawk57-log 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e658101d8d7eb4fc8bfd4b68b84d173c3160405359ff9643b42c9753b7d55712
4
+ data.tar.gz: be5eb51793b4876cc4d20ef502b195cc41a65fd3242caf9067b669450a9e47db
5
+ SHA512:
6
+ metadata.gz: 88ffa2d3a61162e24fe89a3fe92a1afed1737faa97c8e0eda188ce7b11ce5244c266590b36f1514ed617b2980f5886d16b0f947f78159383550565bf8bfe1747
7
+ data.tar.gz: b9ec57f4c3b4960b57731a8780310c9d71d9340a4ca3e93c08d8acccf151a660ad8e1e66fafc4310429e0e4d857a0135b8fb8d31326e1f894ee6439c5e392faf
@@ -0,0 +1,3 @@
1
+ /Gemfile.lock
2
+ *.swp
3
+ .idea
@@ -0,0 +1,21 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3.1
7
+ - 2.4.1
8
+ - 2.5.0
9
+ - ruby-head
10
+
11
+ before_install:
12
+ - gem update --system=2.7.8
13
+ script:
14
+ - bundle exec rake test
15
+
16
+ sudo: false
17
+
18
+ matrix:
19
+ allow_failures:
20
+ - rvm: ruby-head
21
+
@@ -0,0 +1,254 @@
1
+ Release 0.13.0 - 2020/03/09
2
+
3
+ * Accept ruby-kafka v1 or later
4
+
5
+ Release 0.12.4 - 2020/03/03
6
+
7
+ * output: Follow rdkafka log level
8
+
9
+ Release 0.12.3 - 2020/02/06
10
+
11
+ * output: Show warning message for v0.12 plugins
12
+
13
+ Release 0.12.2 - 2020/01/07
14
+
15
+ * input: Refer sasl_over_ssl parameter in plain SASL
16
+
17
+ Release 0.12.1 - 2019/10/14
18
+
19
+ * input: Add time_source parameter to replace use_record_time
20
+
21
+ Release 0.12.0 - 2019/09/27
22
+
23
+ * Support rdkafka-ruby v0.7. Drop v0.6 support.
24
+
25
+ Release 0.11.2 - 2019/09/27
26
+
27
+ * out_rdkafka2: Add share_producer parameter
28
+
29
+ Release 0.11.1 - 2019/08/22
30
+
31
+ * out_kafka2: Fix mutating issue of headers
32
+
33
+ Release 0.11.0 - 2019/07/17
34
+
35
+ * out_kafka2: Add connect_timeout / socket_timeout parameters
36
+ * out_kafka2/out_rdkafka2: Add headers / headers_from_record parameters
37
+ * output: Add use_event_time parameter to use fluentd event time for CreateTime
38
+ * input: Add get_kafka_client_log parameter. Default is `false`
39
+
40
+ Release 0.10.0 - 2019/07/03
41
+
42
+ * output: Fixed max_send_limit_bytes parameter to be in all kafka outputs
43
+ * output: Add ssl_verify_hostname parameter
44
+ * rdkafka output: Fix exceptiona handling
45
+ * Update ruby-kafka version to v0.7.8 or later
46
+
47
+ Release 0.9.6 - 2019/05/28
48
+
49
+ * out_kafka2: Add metadata nil check
50
+
51
+ Release 0.9.5 - 2019/05/23
52
+
53
+ * output: Support sasl_over_ssl parameter to not use SSL with SASL/GSSAPI
54
+
55
+ Release 0.9.4 - 2019/05/13
56
+
57
+ * out_rdkafka2: Add metadata nil check
58
+
59
+ Release 0.9.3 - 2019/05/04
60
+
61
+ * in_kafka_group: Add connect_timeout and socket_timeout parameters
62
+
63
+ Release 0.9.2 - 2019/03/26
64
+
65
+ * out_kafka_buffered: Fix typo of partition_key usage
66
+
67
+ Release 0.9.1 - 2019/03/25
68
+
69
+ * output: Support sasl_over_ssl parameter
70
+ * Support ruby-kafka 0.7.6
71
+
72
+ Release 0.9.0 - 2019/02/22
73
+
74
+ * Add v1 API based rdkafka2 output plugin
75
+ * out_kafka2: Add use_default_for_unknown_topic parameter
76
+
77
+ Release 0.8.4 - 2019/01/18
78
+
79
+ * in_kafka_group: Support integer/float time field with time_format
80
+
81
+ Release 0.8.3 - 2018/12/16
82
+
83
+ * output: Add ssl_client_cert_chain parameter
84
+
85
+ Release 0.8.2 - 2018/12/07
86
+
87
+ * output: Add idempotent parameter
88
+ * out_kafka2: Fix DeliveryFailed signature mismatch
89
+
90
+ Release 0.8.1 - 2018/11/20
91
+
92
+ * input: Support SASL without SSL
93
+
94
+ Release 0.8.0 - 2018/10/18
95
+
96
+ * output: Support SASL without SSL
97
+ * output: Add rdkafka based output
98
+ * Update ruby-kafka dependency to v0.7 or later
99
+
100
+ Release 0.7.9 - 2018/09/11
101
+
102
+ * in_kafka_group: Add fetcher_max_queue_size parameter
103
+
104
+ Release 0.7.8 - 2018/08/29
105
+
106
+ * input: Fix regression of kafka initialization
107
+
108
+ Release 0.7.7 - 2018/08/27
109
+
110
+ * in_kafka_group: Add retry_limit and disable_retry_limit parameters
111
+ * input: Support SSL parameters
112
+ * Add ssl_ca_certs_from_system parameter
113
+ * Make password parameter secret
114
+
115
+ Release 0.7.6 - 2018/08/15
116
+
117
+ * out_kafka2: Add ignore_exceptions and exception_backup parameters
118
+
119
+ Release 0.7.5 - 2018/08/14
120
+
121
+ * out_kafka2: Fix `message_key_key` parameter handling
122
+ * Limit ruby-kafka version('< 0.7.0') to avoid runtime error
123
+
124
+ Release 0.7.4 - 2018/07/11
125
+
126
+ * out_kafka2: Need event_emitter helper for notification
127
+
128
+ Release 0.7.3 - 2018/05/30
129
+
130
+ * output: Use SSL endpoint when ssl_client_cert is true
131
+
132
+ Release 0.7.2 - 2018/03/12
133
+
134
+ * output: Fix the regression of get_kafka_client_log parameter
135
+
136
+ Release 0.7.1 - 2018/03/05
137
+
138
+ * out_kafka2: Fix the regression of kafka client initialization
139
+
140
+ Release 0.7.0 - 2018/02/27
141
+
142
+ * output: SASL PLAIN/SCRAM support
143
+ * input: Fix TimeParser location bug in v1
144
+ * out_kafka2: Fix warning condition for tag chunk key
145
+
146
+ Release 0.6.6 - 2017/12/25
147
+
148
+ * output: Make topic/partition/partition_key/message_key configurable
149
+
150
+ Release 0.6.5 - 2017/12/14
151
+
152
+ * in_kafka_group: Add client_id parameter
153
+
154
+ Release 0.6.4 - 2017/11/23
155
+
156
+ * Multi worker support for v0.14
157
+ * Add kafka_message_key parameter to input plugins
158
+ * Relax ruby-kafka version for 0.5 or later
159
+ * Use oj for json when it is installed
160
+
161
+ Release 0.6.3 - 2017/11/14
162
+
163
+ * in_kafka_group: re-create consumer when error happens during event fetch
164
+
165
+ Release 0.6.2 - 2017/11/1
166
+
167
+ * Fix ltsv parsing issue which generates symbol keys
168
+
169
+ Release 0.6.1 - 2017/08/30
170
+
171
+ * Add stats and datadog monitoring support
172
+ * ssl_ca_certs now accepts multiple paths
173
+ * Fix bug by ruby-kafka 0.4.1 changes
174
+ * Update ruby-kafka dependency to v0.4.1
175
+
176
+ Release 0.6.0 - 2017/07/25
177
+
178
+ * Add principal and keytab parameters for SASL support
179
+
180
+ Release 0.5.7 - 2017/07/13
181
+
182
+ * out_kafka_buffered: Add kafka_agg_max_messages parameter
183
+
184
+ Release 0.5.6 - 2017/07/10
185
+
186
+ * output: Add ActiveSupport notification support
187
+
188
+ Release 0.5.5 - 2017/04/19
189
+
190
+ * output: Some trace log level changed to debug
191
+ * out_kafka_buffered: Add discard_kafka_delivery_failed parameter
192
+
193
+ Release 0.5.4 - 2017/04/12
194
+
195
+ * out_kafka_buffered: Add max_send_limit_bytes parameter
196
+ * out_kafka: Improve buffer overflow handling of ruby-kafka
197
+
198
+ Release 0.5.3 - 2017/02/13
199
+
200
+ * Relax ruby-kafka dependency
201
+
202
+ Release 0.5.2 - 2017/02/13
203
+
204
+ * in_kafka_group: Add max_bytes parameter
205
+
206
+ Release 0.5.1 - 2017/02/06
207
+
208
+ * in_kafka_group: Fix uninitialized constant error
209
+
210
+ Release 0.5.0 - 2017/01/17
211
+
212
+ * output: Add out_kafka2 plugin with v0.14 API
213
+
214
+ Release 0.4.2 - 2016/12/10
215
+
216
+ * input: Add use_record_time and time_format parameters
217
+ * Update ruby-kafka dependency to 0.3.16.beta2
218
+
219
+ Release 0.4.1 - 2016/12/01
220
+
221
+ * output: Support specifying partition
222
+
223
+ Release 0.4.0 - 2016/11/08
224
+
225
+ * Remove zookeeper dependency
226
+
227
+ Release 0.3.5 - 2016/10/21
228
+
229
+ * output: Support message key and related parameters. #91
230
+
231
+ Release 0.3.4 - 2016/10/20
232
+
233
+ * output: Add exclude_topic_key and exclude_partition_key. #89
234
+
235
+ Release 0.3.3 - 2016/10/17
236
+
237
+ * out_kafka_buffered: Add get_kafka_client_log parameter. #83
238
+ * out_kafka_buffered: Skip and log invalid record to avoid buffer stuck. #86
239
+ * in_kafka_group: Add retry_emit_limit to handle BufferQueueLimitError. #87
240
+
241
+ Release 0.3.2 - 2016/10/06
242
+
243
+ * in_kafka_group: Re-fetch events after consumer error. #79
244
+
245
+ Release 0.3.1 - 2016/08/28
246
+
247
+ * output: Change default required_acks to -1. #70
248
+ * Support ruby version changed to 2.1.0 or later
249
+
250
+ Release 0.3.0 - 2016/08/24
251
+
252
+ * Fully replace poseidon ruby library with ruby-kafka to support latest kafka versions
253
+
254
+ See git commits for older changes
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-kafka.gemspec
4
+ gemspec
5
+
6
+
data/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ Copyright (C) 2014 htgc
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+
@@ -0,0 +1,463 @@
1
+ # fluent-plugin-kafka, a plugin for [Fluentd](http://fluentd.org)
2
+
3
+ [![Build Status](https://travis-ci.org/fluent/fluent-plugin-kafka.svg?branch=master)](https://travis-ci.org/fluent/fluent-plugin-kafka)
4
+
5
+ A fluentd plugin to both consume and produce data for Apache Kafka.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'fluent-plugin-kafka'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install fluent-plugin-kafka --no-document
20
+
21
+ If you want to use zookeeper related parameters, you also need to install zookeeper gem. zookeeper gem includes native extension, so development tools are needed, e.g. ruby-devel, gcc, make and etc.
22
+
23
+ ## Requirements
24
+
25
+ - Ruby 2.1 or later
26
+ - Input plugins work with kafka v0.9 or later
27
+ - Output plugins work with kafka v0.8 or later
28
+
29
+ ## Usage
30
+
31
+ ### Common parameters
32
+
33
+ #### SSL authentication
34
+
35
+ - ssl_ca_cert
36
+ - ssl_client_cert
37
+ - ssl_client_cert_key
38
+ - ssl_ca_certs_from_system
39
+
40
+ Set path to SSL related files. See [Encryption and Authentication using SSL](https://github.com/zendesk/ruby-kafka#encryption-and-authentication-using-ssl) for more detail.
41
+
42
+ #### SASL authentication
43
+
44
+ ##### with GSSAPI
45
+
46
+ - principal
47
+ - keytab
48
+
49
+ Set principal and path to keytab for SASL/GSSAPI authentication.
50
+ See [Authentication using SASL](https://github.com/zendesk/ruby-kafka#authentication-using-sasl) for more details.
51
+
52
+ ##### with Plain/SCRAM
53
+
54
+ - username
55
+ - password
56
+ - scram_mechanism
57
+ - sasl_over_ssl
58
+
59
+ Set username, password, scram_mechanism and sasl_over_ssl for SASL/Plain or Scram authentication.
60
+ See [Authentication using SASL](https://github.com/zendesk/ruby-kafka#authentication-using-sasl) for more details.
61
+
62
+ ##### fetch auth info from GSM
63
+ - secretName
64
+ - projectId
65
+ - version :optional
66
+
67
+ ***Requires GOOGLE_APPLICATION_CREDENTIALS env var to be set***
68
+
69
+ ### Input plugin (@type 'kafka')
70
+
71
+ Consume events by single consumer.
72
+
73
+ <source>
74
+ @type kafka
75
+
76
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,..
77
+ topics <listening topics(separate with comma',')>
78
+ format <input text type (text|json|ltsv|msgpack)> :default => json
79
+ message_key <key (Optional, for text format only, default is message)>
80
+ add_prefix <tag prefix (Optional)>
81
+ add_suffix <tag suffix (Optional)>
82
+
83
+ # Optionally, you can manage topic offset by using zookeeper
84
+ offset_zookeeper <zookeer node list (<zookeeper1_host>:<zookeeper1_port>,<zookeeper2_host>:<zookeeper2_port>,..)>
85
+ offset_zk_root_node <offset path in zookeeper> default => '/fluent-plugin-kafka'
86
+
87
+ # ruby-kafka consumer options
88
+ max_bytes (integer) :default => nil (Use default of ruby-kafka)
89
+ max_wait_time (integer) :default => nil (Use default of ruby-kafka)
90
+ min_bytes (integer) :default => nil (Use default of ruby-kafka)
91
+ </source>
92
+
93
+ Supports a start of processing from the assigned offset for specific topics.
94
+
95
+ <source>
96
+ @type kafka
97
+
98
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,..
99
+ format <input text type (text|json|ltsv|msgpack)>
100
+ <topic>
101
+ topic <listening topic>
102
+ partition <listening partition: default=0>
103
+ offset <listening start offset: default=-1>
104
+ </topic>
105
+ <topic>
106
+ topic <listening topic>
107
+ partition <listening partition: default=0>
108
+ offset <listening start offset: default=-1>
109
+ </topic>
110
+ </source>
111
+
112
+ See also [ruby-kafka README](https://github.com/zendesk/ruby-kafka#consuming-messages-from-kafka) for more detailed documentation about ruby-kafka.
113
+
114
+ Consuming topic name is used for event tag. So when the target topic name is `app_event`, the tag is `app_event`. If you want to modify tag, use `add_prefix` or `add_suffix` parameters. With `add_prefix kafka`, the tag is `kafka.app_event`.
115
+
116
+ ### Input plugin (@type 'kafka_group', supports kafka group)
117
+
118
+ Consume events by kafka consumer group features..
119
+
120
+ <source>
121
+ @type kafka_group
122
+
123
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,..
124
+ consumer_group <consumer group name, must set>
125
+ topics <listening topics(separate with comma',')>
126
+ format <input text type (text|json|ltsv|msgpack)> :default => json
127
+ message_key <key (Optional, for text format only, default is message)>
128
+ add_prefix <tag prefix (Optional)>
129
+ add_suffix <tag suffix (Optional)>
130
+ retry_emit_limit <Wait retry_emit_limit x 1s when BuffereQueueLimitError happens. The default is nil and it means waiting until BufferQueueLimitError is resolved>
131
+ use_record_time (Deprecated. Use 'time_source record' instead.) <If true, replace event time with contents of 'time' field of fetched record>
132
+ time_source <source for message timestamp (now|kafka|record)> :default => now
133
+ time_format <string (Optional when use_record_time is used)>
134
+
135
+ # ruby-kafka consumer options
136
+ max_bytes (integer) :default => 1048576
137
+ max_wait_time (integer) :default => nil (Use default of ruby-kafka)
138
+ min_bytes (integer) :default => nil (Use default of ruby-kafka)
139
+ offset_commit_interval (integer) :default => nil (Use default of ruby-kafka)
140
+ offset_commit_threshold (integer) :default => nil (Use default of ruby-kafka)
141
+ fetcher_max_queue_size (integer) :default => nil (Use default of ruby-kafka)
142
+ start_from_beginning (bool) :default => true
143
+ </source>
144
+
145
+ See also [ruby-kafka README](https://github.com/zendesk/ruby-kafka#consuming-messages-from-kafka) for more detailed documentation about ruby-kafka options.
146
+
147
+ Consuming topic name is used for event tag. So when the target topic name is `app_event`, the tag is `app_event`. If you want to modify tag, use `add_prefix` or `add_suffix` parameter. With `add_prefix kafka`, the tag is `kafka.app_event`.
148
+
149
+ ### Output plugin
150
+
151
+ This `kafka2` plugin is for fluentd v1.0 or later. This will be `out_kafka` plugin in the future.
152
+
153
+ <match app.**>
154
+ @type kafka2
155
+
156
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,.. # Set brokers directly
157
+ topic_key (string) :default => 'topic'
158
+ partition_key (string) :default => 'partition'
159
+ partition_key_key (string) :default => 'partition_key'
160
+ message_key_key (string) :default => 'message_key'
161
+ default_topic (string) :default => nil
162
+ default_partition_key (string) :default => nil
163
+ default_message_key (string) :default => nil
164
+ exclude_topic_key (bool) :default => false
165
+ exclude_partition_key (bool) :default => false
166
+ exclude_partition (bool) :default => false
167
+ exclude_message_key (bool) :default => false
168
+ get_kafka_client_log (bool) :default => false
169
+ headers (hash) :default => {}
170
+ headers_from_record (hash) :default => {}
171
+ use_default_for_unknown_topic (bool) :default => false
172
+
173
+ <format>
174
+ @type (json|ltsv|msgpack|attr:<record name>|<formatter name>) :default => json
175
+ </format>
176
+
177
+ # Optional. See https://docs.fluentd.org/v/1.0/configuration/inject-section
178
+ <inject>
179
+ tag_key tag
180
+ time_key time
181
+ </inject>
182
+
183
+ # See fluentd document for buffer related parameters: https://docs.fluentd.org/v/1.0/configuration/buffer-section
184
+ # Buffer chunk key should be same with topic_key. If value is not found in the record, default_topic is used.
185
+ <buffer topic>
186
+ flush_interval 10s
187
+ </buffer>
188
+
189
+ # ruby-kafka producer options
190
+ idempotent (bool) :default => false
191
+ sasl_over_ssl (bool) :default => true
192
+ max_send_retries (integer) :default => 1
193
+ required_acks (integer) :default => -1
194
+ ack_timeout (integer) :default => nil (Use default of ruby-kafka)
195
+ compression_codec (string) :default => nil (No compression. Depends on ruby-kafka: https://github.com/zendesk/ruby-kafka#compression)
196
+ </match>
197
+
198
+ The `<formatter name>` in `<format>` uses fluentd's formatter plugins. See [formatter article](https://docs.fluentd.org/v/1.0/formatter).
199
+
200
+ ruby-kafka sometimes returns `Kafka::DeliveryFailed` error without good information.
201
+ In this case, `get_kafka_client_log` is useful for identifying the error cause.
202
+ ruby-kafka's log is routed to fluentd log so you can see ruby-kafka's log in fluentd logs.
203
+
204
+ Supports following ruby-kafka's producer options.
205
+
206
+ - max_send_retries - default: 1 - Number of times to retry sending of messages to a leader.
207
+ - required_acks - default: -1 - The number of acks required per request. If you need flush performance, set lower value, e.g. 1, 2.
208
+ - ack_timeout - default: nil - How long the producer waits for acks. The unit is seconds.
209
+ - compression_codec - default: nil - The codec the producer uses to compress messages.
210
+ - max_send_limit_bytes - default: nil - Max byte size to send message to avoid MessageSizeTooLarge. For example, if you set 1000000(message.max.bytes in kafka), Message more than 1000000 byes will be dropped.
211
+ - discard_kafka_delivery_failed - default: false - discard the record where [Kafka::DeliveryFailed](http://www.rubydoc.info/gems/ruby-kafka/Kafka/DeliveryFailed) occurred
212
+ - monitoring_list - default: [] - library to be used to monitor. statsd and datadog are supported
213
+
214
+ If you want to know about detail of monitoring, see also https://github.com/zendesk/ruby-kafka#monitoring
215
+
216
+ See also [Kafka::Client](http://www.rubydoc.info/gems/ruby-kafka/Kafka/Client) for more detailed documentation about ruby-kafka.
217
+
218
+ This plugin supports compression codec "snappy" also.
219
+ Install snappy module before you use snappy compression.
220
+
221
+ $ gem install snappy --no-document
222
+
223
+ snappy gem uses native extension, so you need to install several packages before.
224
+ On Ubuntu, need development packages and snappy library.
225
+
226
+ $ sudo apt-get install build-essential autoconf automake libtool libsnappy-dev
227
+
228
+ On CentOS 7 installation is also necessary.
229
+
230
+ $ sudo yum install gcc autoconf automake libtool snappy-devel
231
+
232
+ This plugin supports compression codec "lz4" also.
233
+ Install extlz4 module before you use lz4 compression.
234
+
235
+ $ gem install extlz4 --no-document
236
+
237
+ This plugin supports compression codec "zstd" also.
238
+ Install zstd-ruby module before you use zstd compression.
239
+
240
+ $ gem install zstd-ruby --no-document
241
+
242
+ #### Load balancing
243
+
244
+ Messages will be assigned a partition at random as default by ruby-kafka, but messages with the same partition key will always be assigned to the same partition by setting `default_partition_key` in config file.
245
+ If key name `partition_key_key` exists in a message, this plugin set the value of partition_key_key as key.
246
+
247
+ |default_partition_key|partition_key_key| behavior |
248
+ | --- | --- | --- |
249
+ |Not set|Not exists| All messages are assigned a partition at random |
250
+ |Set| Not exists| All messages are assigned to the specific partition |
251
+ |Not set| Exists | Messages which have partition_key_key record are assigned to the specific partition, others are assigned a partition at random |
252
+ |Set| Exists | Messages which have partition_key_key record are assigned to the specific partition with partition_key_key, others are assigned to the specific partition with default_parition_key |
253
+
254
+ If key name `message_key_key` exists in a message, this plugin publishes the value of message_key_key to kafka and can be read by consumers. Same message key will be assigned to all messages by setting `default_message_key` in config file. If message_key_key exists and if partition_key_key is not set explicitly, messsage_key_key will be used for partitioning.
255
+
256
+ #### Headers
257
+ It is possible to set headers on Kafka messages. This only works for kafka2 and rdkafka2 output plugin.
258
+
259
+ The format is like key1:value1,key2:value2. For example:
260
+
261
+ <match app.**>
262
+ @type kafka2
263
+ [...]
264
+ headers some_header_name:some_header_value
265
+ <match>
266
+
267
+ You may set header values based on a value of a fluentd record field. For example, imagine a fluentd record like:
268
+
269
+ {"source": { "ip": "127.0.0.1" }, "payload": "hello world" }
270
+
271
+ And the following fluentd config:
272
+
273
+ <match app.**>
274
+ @type kafka2
275
+ [...]
276
+ headers_from_record source_ip:$.source.ip
277
+ <match>
278
+
279
+ The Kafka message will have a header of source_ip=12.7.0.0.1.
280
+
281
+ The configuration format is jsonpath. It is descibed in https://docs.fluentd.org/plugin-helper-overview/api-plugin-helper-record_accessor
282
+
283
+ ### Buffered output plugin
284
+
285
+ This plugin uses ruby-kafka producer for writing data. This plugin is for v0.12. If you use v1, see `kafka2`.
286
+ Support of fluentd v0.12 has ended. `kafka_buffered` will be an alias of `kafka2` and will be removed in the future.
287
+
288
+ <match app.**>
289
+ @type kafka_buffered
290
+
291
+ # Brokers: you can choose either brokers or zookeeper. If you are not familiar with zookeeper, use brokers parameters.
292
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,.. # Set brokers directly
293
+ zookeeper <zookeeper_host>:<zookeeper_port> # Set brokers via Zookeeper
294
+ zookeeper_path <broker path in zookeeper> :default => /brokers/ids # Set path in zookeeper for kafka
295
+
296
+ topic_key (string) :default => 'topic'
297
+ partition_key (string) :default => 'partition'
298
+ partition_key_key (string) :default => 'partition_key'
299
+ message_key_key (string) :default => 'message_key'
300
+ default_topic (string) :default => nil
301
+ default_partition_key (string) :default => nil
302
+ default_message_key (string) :default => nil
303
+ exclude_topic_key (bool) :default => false
304
+ exclude_partition_key (bool) :default => false
305
+ exclude_partition (bool) :default => false
306
+ exclude_message_key (bool) :default => false
307
+ output_data_type (json|ltsv|msgpack|attr:<record name>|<formatter name>) :default => json
308
+ output_include_tag (bool) :default => false
309
+ output_include_time (bool) :default => false
310
+ exclude_topic_key (bool) :default => false
311
+ exclude_partition_key (bool) :default => false
312
+ get_kafka_client_log (bool) :default => false
313
+
314
+ # See fluentd document for buffer related parameters: https://docs.fluentd.org/v/0.12/buffer
315
+
316
+ # ruby-kafka producer options
317
+ idempotent (bool) :default => false
318
+ sasl_over_ssl (bool) :default => true
319
+ max_send_retries (integer) :default => 1
320
+ required_acks (integer) :default => -1
321
+ ack_timeout (integer) :default => nil (Use default of ruby-kafka)
322
+ compression_codec (string) :default => nil (No compression. Depends on ruby-kafka: https://github.com/zendesk/ruby-kafka#compression)
323
+ kafka_agg_max_bytes (integer) :default => 4096
324
+ kafka_agg_max_messages (integer) :default => nil (No limit)
325
+ max_send_limit_bytes (integer) :default => nil (No drop)
326
+ discard_kafka_delivery_failed (bool) :default => false (No discard)
327
+ monitoring_list (array) :default => []
328
+ </match>
329
+
330
+ `kafka_buffered` has two additional parameters:
331
+
332
+ - kafka_agg_max_bytes - default: 4096 - Maximum value of total message size to be included in one batch transmission.
333
+ - kafka_agg_max_messages - default: nil - Maximum number of messages to include in one batch transmission.
334
+
335
+ ### Non-buffered output plugin
336
+
337
+ This plugin uses ruby-kafka producer for writing data. For performance and reliability concerns, use `kafka_bufferd` output instead. This is mainly for testing.
338
+
339
+ <match app.**>
340
+ @type kafka
341
+
342
+ # Brokers: you can choose either brokers or zookeeper.
343
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,.. # Set brokers directly
344
+ zookeeper <zookeeper_host>:<zookeeper_port> # Set brokers via Zookeeper
345
+ zookeeper_path <broker path in zookeeper> :default => /brokers/ids # Set path in zookeeper for kafka
346
+
347
+ default_topic (string) :default => nil
348
+ default_partition_key (string) :default => nil
349
+ default_message_key (string) :default => nil
350
+ output_data_type (json|ltsv|msgpack|attr:<record name>|<formatter name>) :default => json
351
+ output_include_tag (bool) :default => false
352
+ output_include_time (bool) :default => false
353
+ exclude_topic_key (bool) :default => false
354
+ exclude_partition_key (bool) :default => false
355
+
356
+ # ruby-kafka producer options
357
+ max_send_retries (integer) :default => 1
358
+ required_acks (integer) :default => -1
359
+ ack_timeout (integer) :default => nil (Use default of ruby-kafka)
360
+ compression_codec (string) :default => nil (No compression. Depends on ruby-kafka: https://github.com/zendesk/ruby-kafka#compression)
361
+ max_buffer_size (integer) :default => nil (Use default of ruby-kafka)
362
+ max_buffer_bytesize (integer) :default => nil (Use default of ruby-kafka)
363
+ </match>
364
+
365
+ This plugin also supports ruby-kafka related parameters. See Buffered output plugin section.
366
+
367
+ ### rdkafka based output plugin
368
+
369
+ This plugin uses `rdkafka` instead of `ruby-kafka` for kafka client.
370
+ You need to install rdkafka gem.
371
+
372
+ # rdkafka is C extension library. Need to install development tools like ruby-devel, gcc and etc
373
+ # for v0.12 or later
374
+ $ gem install rdkafka --no-document
375
+ # for v0.11 or earlier
376
+ $ gem install rdkafka -v 0.6.0 --no-document
377
+
378
+ `rdkafka2` is for fluentd v1.0 or later.
379
+
380
+ <match app.**>
381
+ @type rdkafka2
382
+
383
+ brokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>,.. # Set brokers directly
384
+
385
+ topic_key (string) :default => 'topic'
386
+ default_topic (string) :default => nil
387
+ partition_key (string) :default => 'partition'
388
+ partition_key_key (string) :default => 'partition_key'
389
+ message_key_key (string) :default => 'message_key'
390
+ default_topic (string) :default => nil
391
+ default_partition_key (string) :default => nil
392
+ default_message_key (string) :default => nil
393
+ exclude_topic_key (bool) :default => false
394
+ exclude_partition_key (bool) :default => false
395
+
396
+ # same with kafka2
397
+ headers (hash) :default => {}
398
+ headers_from_record (hash) :default => {}
399
+
400
+ <format>
401
+ @type (json|ltsv|msgpack|attr:<record name>|<formatter name>) :default => json
402
+ </format>
403
+
404
+ # Optional. See https://docs.fluentd.org/v/1.0/configuration/inject-section
405
+ <inject>
406
+ tag_key tag
407
+ time_key time
408
+ </inject>
409
+
410
+ # See fluentd document for buffer section parameters: https://docs.fluentd.org/v/1.0/configuration/buffer-section
411
+ # Buffer chunk key should be same with topic_key. If value is not found in the record, default_topic is used.
412
+ <buffer topic>
413
+ flush_interval 10s
414
+ </buffer>
415
+
416
+ # You can set any rdkafka configuration via this parameter: https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md
417
+ rdkafka_options {
418
+ "log_level" : 7
419
+ }
420
+
421
+ # rdkafka2 specific parameters
422
+
423
+ # share kafka producer between flush threads. This is mainly for reducing kafka operations like kerberos
424
+ share_producer (bool) :default => false
425
+ # Timeout for polling message wait. If 0, no wait.
426
+ rdkafka_delivery_handle_poll_timeout (integer) :default => 30
427
+ # If the record size is larger than this value, such records are ignored. Default is no limit
428
+ max_send_limit_bytes (integer) :default => nil
429
+ </match>
430
+
431
+ If you use v0.12, use `rdkafka` instead.
432
+
433
+ <match kafka.**>
434
+ @type rdkafka
435
+
436
+ default_topic kafka
437
+ flush_interval 1s
438
+ output_data_type json
439
+
440
+ rdkafka_options {
441
+ "log_level" : 7
442
+ }
443
+ </match>
444
+
445
+ ## FAQ
446
+
447
+ ### Why fluent-plugin-kafka can't send data to our kafka cluster?
448
+
449
+ We got lots of similar questions. Almost cases, this problem happens by version mismatch between ruby-kafka and kafka cluster.
450
+ See ruby-kafka README for more details: https://github.com/zendesk/ruby-kafka#compatibility
451
+
452
+ To avoid the problem, there are 2 approaches:
453
+
454
+ - Upgrade your kafka cluster to latest version. This is better becase recent version is faster and robust.
455
+ - Downgrade ruby-kafka/fluent-plugin-kafka to work with your older kafka.
456
+
457
+ ## Contributing
458
+
459
+ 1. Fork it
460
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
461
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
462
+ 4. Push to the branch (`git push origin my-new-feature`)
463
+ 5. Create new Pull Request