187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
# File 'lib/kafka/async_producer.rb', line 187
def run
@logger.info "Starting async producer in the background..."
loop do
operation, payload = @queue.pop
case operation
when :produce
produce(*payload)
deliver_messages if threshold_reached?
when :deliver_messages
deliver_messages
when :shutdown
begin
@producer.deliver_messages
rescue Error => e
@logger.error("Failed to deliver messages during shutdown: #{e.message}")
@instrumenter.instrument("drop_messages.async_producer", {
message_count: @producer.buffer_size + @queue.size,
})
end
break
else
raise "Unknown operation #{operation.inspect}"
end
end
rescue Kafka::Error => e
@logger.error "Unexpected Kafka error #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}"
@logger.info "Restarting in 10 seconds..."
sleep 10
retry
rescue Exception => e
@logger.error "Unexpected Kafka error #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}"
@logger.error "Async producer crashed!"
ensure
@producer.shutdown
end
|