zoukankan      html  css  js  c++  java
  • kafka消费数据存入elasticsearch代码示例

    package com.unimas.test;
    
     import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    import java.util.concurrent.Executor;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    import org.I0Itec.zkclient.ZkClient;
    
    import kafka.consumer.Consumer;
    import kafka.consumer.ConsumerConfig;
    import kafka.consumer.KafkaStream;
    import kafka.javaapi.consumer.ConsumerConnector;
    import kafka.utils.ZkUtils;
    
    public class KafkaWarningAction {
           private static final String topic = "avro-log-bj-jingnei1-dev-proxy-websense";private static final String group_id = "kafkawarning01";
          private static final Integer threads = 5;
          private static ConsumerConnector consumer;
          private static ExecutorService executor;
    public static void main(String[] args) {//创建消费者消费数据 Properties props = new Properties(); props.put("zookeeper.connect", "host1:2181,host2:2181,host3:2181"); props.put("group.id", group_id); props.put("auto.offset.reset", "smallest"); ConsumerConfig config = new ConsumerConfig(props); consumer =Consumer.createJavaConsumerConnector(config); Map<String, Integer> topicCountMap = new HashMap<String, Integer>(); topicCountMap.put(topic, threads); Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap); List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic); executor = Executors.newFixedThreadPool(threads);//创建线程池 Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { shutdown(); } }); //写入ES EsProducer esProducer = new EsProducer(); esProducer.WriteToEs(streams,executor); }public static void shutdown(){ if(consumer!=null){ consumer.shutdown(); consumer = null; } if (executor != null){ executor.shutdown(); executor = null; } } }
    package com.unimas.test;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.ExecutorService;
    
    import org.apache.avro.Schema;
    import org.apache.avro.generic.GenericDatumReader;
    import org.apache.avro.generic.GenericDatumWriter;
    import org.apache.avro.generic.GenericRecord;
    import org.apache.avro.io.DatumReader;
    import org.apache.avro.io.Decoder;
    import org.apache.avro.io.DecoderFactory;
    import org.apache.avro.io.EncoderFactory;
    import org.apache.avro.io.JsonEncoder;
    import org.elasticsearch.action.bulk.BulkItemResponse;
    import org.elasticsearch.action.bulk.BulkRequestBuilder;
    import org.elasticsearch.action.bulk.BulkResponse;
    import org.elasticsearch.action.index.IndexRequest;
    import org.elasticsearch.client.Client;
    
    import kafka.consumer.ConsumerIterator;
    import kafka.consumer.KafkaStream;
    
    public class EsProducer {
        SimpleDateFormat _format = new SimpleDateFormat("yyyyMMdd");
        long starttime = System.currentTimeMillis();
    
        public void WriteToEs(List<KafkaStream<byte[], byte[]>> streams,  ExecutorService executor) {
            
    
            
            for (final KafkaStream<byte[], byte[]> kafkaStream : streams) {
                executor.submit(new Runnable() {
                    @Override
                    public void run() {
                        Client client = Utils.getClient();
                        BulkRequestBuilder bulk = client.prepareBulk();
                        String typeName = "type-warning";
                        Schema _schema = null;
                        String schemaName = "websense.avsc";
                        ConsumerIterator<byte[], byte[]> it = kafkaStream.iterator();
                        while(it.hasNext()){
                            byte[] message = it.next().message();
                            String indexName = "warning-message-";
                            try {
                                String schemaContesnt =Utils.readFileContent(schemaName);
                                _schema = new Schema.Parser().parse(schemaContesnt);
                                DatumReader<GenericRecord> reader1 = new GenericDatumReader<GenericRecord>(_schema);  
                                Decoder decoder1 = DecoderFactory.get().binaryDecoder(message, null);
                                GenericRecord result = (GenericRecord) reader1.read(null, decoder1);
                                GenericDatumWriter<Object>  w = new GenericDatumWriter<Object>(_schema);
                                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                                JsonEncoder    jsonEncoder = EncoderFactory.get().jsonEncoder(_schema, outputStream);
                                w.write(result, jsonEncoder);
                                jsonEncoder.flush();
                                
                                String timestamp = _format.format(new Date(Long.parseLong(
                                        result.get("time_received").toString())));
                                indexName = indexName +timestamp;
                                IndexRequest index = new IndexRequest();
                                index.index(indexName);
                                index.type(typeName);
                                index.source(new String(outputStream.toByteArray()));
                                bulk.add(index);
                                if (bulk.numberOfActions() >= 20000) {
                                    BulkResponse response = bulk.execute().actionGet();
                                    long l1 = 0L;
                                    //long currentTime = System.currentTimeMillis();
                                    //if(currentTime>=starttime+120*1000){
                                    //    System.out.println("stop........");      定时停止任务代码
                                    //    KafkaWarningAction.shutdown();
                                    //    break;
                                    //}
                                    if (response.hasFailures()) {
                                        BulkItemResponse[] arrayOfBulkItemResponse1 = response.getItems();
                                        for (BulkItemResponse localBulkItemResponse : arrayOfBulkItemResponse1) {
                                            if (localBulkItemResponse.isFailed()) {
                                                l1 += 1L;
                                                System.out.println(
                                                        "bulk failure message " + localBulkItemResponse.getFailureMessage());
                                            }
                                        }
                                    }
                                    System.out.println("Inner  Failure  of article number is " + l1);
                                    bulk = client.prepareBulk();
                                }
                                
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        if (bulk.numberOfActions() > 0) {
                            BulkResponse response = bulk.execute().actionGet();
                            long l1 = 0L;
                            if (response.hasFailures()) {
                                BulkItemResponse[] arrayOfBulkItemResponse1 = response.getItems();
                                for (BulkItemResponse localBulkItemResponse : arrayOfBulkItemResponse1) {
                                    if (localBulkItemResponse.isFailed()) {
                                        l1 += 1L;
                                        System.out.println(
                                                "bulk failure message " + localBulkItemResponse.getFailureMessage());
                                    }
                                }
                            }
                            System.out.println("Failure of article number is " + l1);
                        }
                    }
                
                });
            }
        }
        
    
    }
    package com.unimas.test;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.net.InetAddress;
    
    import org.elasticsearch.client.Client;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.InetSocketTransportAddress;
    
    public class Utils {
        
            static TransportClient client = null;
            
            /*elasticSearch 1.5.0*/
    //        static {
    //            String clusterName = "SOCBigData";
    //            String ip = "11.11.184.180";
    //            Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true)
    //                    .put("client.transport.nodes_sampler_interval", 60)
    //                    .put("cluster.name",clusterName).build();
    //            client = new TransportClient(settings);
    //            client.addTransportAddress(new InetSocketTransportAddress(ip, 9300));
    //            client.connectedNodes();
    //        }
            
            /*elasticSearch 2.0.0*/
            static {
                //Config config = Config.getInstance();
    //            String clusterName = config.getESClusterName();
    //            String ip = config.getESIp();
                String clusterName = "udb_soc";
                String ip = "11.11.11.11";
                Settings settings = Settings.settingsBuilder().put("client.transport.sniff", false)
                        .put("client.transport.nodes_sampler_interval", "60s")
                        .put("cluster.name",clusterName).build();
                client = TransportClient.builder().settings(settings).build();
                for (String host : ip.split(",")) {
                    try {
                        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), 9300));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                client.connectedNodes();
            }
            
            public final static Client getClient() {
                return client;
            }
            
            
            
        // 参数string为你的文件名
            public static String readFileContent(String fileName) throws IOException {
                String path = "E:\workspace\DataImportV2.1\target";
                File file = new File(path+"\"+fileName);
                BufferedReader bf = new BufferedReader(new FileReader(file));
                String content = "";
                StringBuilder sb = new StringBuilder();
    
                while (content != null) {
                    content = bf.readLine();
    
                    if (content == null) {
                        break;
                    }
    
                    sb.append(content.trim());
                }
                
                bf.close();
                return sb.toString();
            }
    }
  • 相关阅读:
    android PopupWindow的使用
    工作
    android StringUtils
    Android DrawableTextView图片文字居中显示
    android 布局使用GridView
    android 微信支付流程
    日记 2016.10.23 好好努力 不要放弃治疗!
    一、Python爬虫
    【Python工具】Excle 读写 (使用 xlrd 和 xlrt)
    Django中,图片显示问题--Django中静态文件处理方法指南
  • 原文地址:https://www.cnblogs.com/ygwx/p/5337835.html
Copyright © 2011-2022 走看看