天天看點

logstash讀取kafka資料插件

       最近公司做日志檢索和計數日志不同次元統計,選用了ELK,我們的日志已經上傳到Kafka中,Logstash需要從Kafka讀取資料,下面是Logstash的簡化配置:

<span style="font-size:18px;">input {
  kafka {
        #Kafka topic
        topic_id => "test_count_log"
        #消費者組 
        group_id => "logstash_data_access_event"
        #zk的連結位址 
        zk_connect => "10.0.171.202:2181,10.0.171.203:2181,10.0.171.204:2181fka_msg"
        queue_size => 80000
        consumer_threads => 4
        fetch_message_max_bytes => 10485760
  }
}

output {
  elasticsearch {
        hosts => ["10.35.129.3:9200","10.35.129.4:9200","10.35.129.5:9200","10.35.129.6:9200","10.35.129.7:9200"]
        workers => 4
        codec => "json"
        index => "kafka_test_count_log-%{+YYYY.MM.dd}"
  }
}</span>
           

       想要使用多個 logstash 端協同消費同一個 topic 的話,那麼需要把兩個或是多個 logstash 消費端配置成相同的 group_id 和 topic_id , 但是前提是要把 相應的 topic 分多個 partitions (區) ,多個消費者消費是無法保證消息的消費順序性的。這裡解釋下,為什麼要分多個 partitions(區) , kafka 的消息模型是對 topic 分區以達到分布式效果。每個 topic 下的不同的 partitions (區) 隻能有一個 Owner 去消費。是以隻有多個分區後才能啟動多個消費者,對應不同的區去消費。其中協調消費部分是由 server 端協調而成。不必使用者考慮太多。隻是 消息的消費則是無序的 。

總結:保證消息的順序,那就用一個 partition 。 kafka 的每個 partition 隻能同時被同一個 group 中的一個 consumer 消費 。