/vendor/bundle/jruby/1.9/gems/logstash-input-kafka-5.1.6/vendor/jar-dependencies/runtime-jars/kafka-clients-0.10.0.1.jar
./vendor/bundle/jruby/1.9/gems/logstash-output-kafka-5.1.5/vendor/jar-dependencies /runtime-jars/kafka-clients-0.10.0.1.jar
loop do end
循环来一直读取当前文件, 直到收集到文件尾或有异常发生,才退出;
如此这样, 当有一个很大的或频繁被写入文件先处于被收集状态, 则其他待收集文件则没有机会被收集;
当然作者设计这样的逻辑也有他的道理.loop do end
循环是在observe_read_file
这个函数里(./vendor/bundle/jruby/1.9/gems/filewatch-0.9.0/lib/filewatch/observing_tail.rb), 可以增加一个行数控制, 每次当当前文件收集的行数大于预设的阈值后就跳出这个loop do end
循环.kill -SIGTERM
后,logstash进程一直无法结束, 日志里会报The shutdown process appears to be stalled due to busy or blocked plugins. Check the logs for more information
loop do end
循环.loop do end
循环中check这个变量, 来决定是否退出这个循环.kill -SIGTERM
后,logstash进程一直无法结束, 日志里会报The shutdown process appears to be stalled due to busy or blocked plugins. Check the logs for more information
/vendor/bundle/jruby/1.9/gems/logstash-codec-multiline-3.0.3/lib/logstash/codecs/identity_map_codec.rb
这个文件中的start
和stop
函数, 按现在的逻辑stop
后start
仍可能被调用, 然后在start
里又开启了一个新的thread, 却没有机会被stop了;stop
后, 即使再次调用start
, 也不会再开启一个新的线程.BufferPoll::allocate
, 具体原因可参考kafka官方bug