Skip to content

Commit 20ba524

Browse files
authored
Merge pull request #496 from kubotat/enhancement/discard_kafka_delivery_failed_regex
Enhancement : Add "discard_kafka_delivery_failed_regex" option
2 parents 6fa9ce2 + 3a9191c commit 20ba524

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ You need to install rdkafka gem.
517517
exclude_topic_key (bool) :default => false
518518
exclude_partition_key (bool) :default => false
519519
discard_kafka_delivery_failed (bool) :default => false (No discard)
520+
discard_kafka_delivery_failed_regex (regexp) :default => nil (No discard)
520521
use_event_time (bool) :default => false
521522

522523
# same with kafka2
@@ -559,6 +560,9 @@ You need to install rdkafka gem.
559560
max_enqueue_bytes_per_second (integer) :default => nil
560561
</match>
561562

563+
`rdkafka2` supports `discard_kafka_delivery_failed_regex` parameter:
564+
- `discard_kafka_delivery_failed_regex` - default: nil - discard the record where the Kafka::DeliveryFailed occurred and the emitted message matches the given regex pattern, such as `/unknown_topic/`.
565+
562566
If you use v0.12, use `rdkafka` instead.
563567

564568
<match kafka.**>

lib/fluent/plugin/out_rdkafka2.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ class Fluent::Rdkafka2Output < Output
112112
config_param :use_event_time, :bool, :default => false, :desc => 'Use fluentd event time for rdkafka timestamp'
113113
config_param :max_send_limit_bytes, :size, :default => nil
114114
config_param :discard_kafka_delivery_failed, :bool, :default => false
115+
config_param :discard_kafka_delivery_failed_regex, :regexp, :default => nil
115116
config_param :rdkafka_buffering_max_ms, :integer, :default => nil, :desc => 'Used for queue.buffering.max.ms'
116117
config_param :rdkafka_buffering_max_messages, :integer, :default => nil, :desc => 'Used for queue.buffering.max.messages'
117118
config_param :rdkafka_message_max_bytes, :integer, :default => nil, :desc => 'Used for message.max.bytes'
@@ -461,9 +462,13 @@ def write(chunk)
461462
if @discard_kafka_delivery_failed
462463
log.warn "Delivery failed. Discard events:", :error => e.to_s, :error_class => e.class.to_s, :tag => tag
463464
else
464-
log.warn "Send exception occurred: #{e} at #{e.backtrace.first}"
465-
# Raise exception to retry sendind messages
466-
raise e
465+
if @discard_kafka_delivery_failed_regex != nil && @discard_kafka_delivery_failed_regex.match?(e.to_s)
466+
log.warn "Delivery failed and matched regexp pattern #{@discard_kafka_delivery_failed_regex}. Discard events:", :error => e.to_s, :error_class => e.class.to_s, :tag => tag
467+
else
468+
log.warn "Send exception occurred: #{e} at #{e.backtrace.first}"
469+
# Raise exception to retry sendind messages
470+
raise e
471+
end
467472
end
468473
ensure
469474
@writing_threads_mutex.synchronize { @writing_threads.delete(Thread.current) }

0 commit comments

Comments
 (0)