Kafka和ElasticSearch的整合

三种方案

  • Kafka->logstash->elasticsearch->kibana(简单,只需启动一个代理程序)
  • Kafka->kafka-connect-elasticsearch->elasticsearch->kibana(与confluent绑定紧,有些复杂) https://github.com/confluentinc/kafka-connect-elasticsearch
  • Kafka->elasticsearch-river-kafka-1.2.1-plugin->elasticsearch->kibana(代码很久没更新,后续支持比较差)

本文将采用方案一来完成这一伟大目标

日志写到kafka

首先,是先要向kafka中写入日志,对于0.9+以上版本的kafka,我们可以采用如下配置方式。

       
            org.apache.kafka
            kafka-log4j-appender
            0.10.2.1
        

github上有开源的logback-kafka-appender提供。
对于早于该版本的kafka,可以直接使用kafka包中的KafkaLog4jAppender。其他日志方式类似。初始化logger的用法如下

    static {
        KafkaLog4jAppender kafkaAppender = new KafkaLog4jAppender();
        kafkaAppender.setBrokerList(ConfigService.getAppConfig().
                getProperty("log4j.appender.kafkalog.brokerList", ipListStr));
        kafkaAppender.setTopic(logTopicName);
        kafkaAppender.setCompressionType("gzip");
        kafkaAppender.setSyncSend(false);
        kafkaAppender.setLayout(new PatternLayout("%p@@log@@%d{yyyy-MM-dd@@HH:mm:ss}@@%m%n"));
        kafkaAppender.activateOptions();
        tripLogger.addAppender(kafkaAppender);
        tripLogger.setLevel(Level.INFO);
    }

kafka对接ES

修改配置如下.ES提供REST访问的9200端口。

input {
    kafka {
        bootstrap_servers => ["10.237.64.46:9094"]
        group_id => "es-transfer"
        topics => ["JSON_PRODUCE_TOPIC"]
        consumer_threads => 5
        decorate_events => true
        codec => "json"
        }
}
output {
    elasticsearch {
        hosts => ["10.5.145.101:9200"]
        index => "test_kafka"
        codec => "json"
   }
}

启动导数程序如下

sh ./bin/logstash -f ./config/kafka-logstash-es.conf

你可能感兴趣的:(java,大数据技术)