• java实现Kafka生产者示例


    使用java实现Kafka的生产者

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    package com.lisg.kafkatest;
     
    import java.util.Properties;
     
    import kafka.javaapi.producer.Producer;
    import kafka.producer.KeyedMessage;
    import kafka.producer.Partitioner;
    import kafka.producer.ProducerConfig;
    import kafka.serializer.StringEncoder;
     
    /**
     * Kafka生产者
     * @author lisg
     *
     */
    public class KafkaProducer {
     
        public static void main(String[] args) {
             
            Properties props = new Properties();
            //根据这个配置获取metadata,不必是kafka集群上的所有broker,但最好至少有两个
            props.put("metadata.broker.list", "vm1:9092,vm2:9092");
            //消息传递到broker时的序列化方式
            props.put("serializer.class", StringEncoder.class.getName());
            //zk集群
            props.put("zookeeper.connect", "vm1:2181");
            //是否获取反馈
            //0是不获取反馈(消息有可能传输失败)
            //1是获取消息传递给leader后反馈(其他副本有可能接受消息失败)
            //-1是所有in-sync replicas接受到消息时的反馈
            props.put("request.required.acks", "1");
    //      props.put("partitioner.class", MyPartition.class.getName());
             
            //创建Kafka的生产者, key是消息的key的类型, value是消息的类型
            Producer<Integer, String> producer = new Producer<Integer, String>(
                    new ProducerConfig(props));
             
            int count = 0;
            while(true) {
                String message = "message-" + ++count;
                //消息主题是test
                KeyedMessage<Integer, String> keyedMessage = new KeyedMessage<Integer, String>("test", message);
                //message可以带key, 根据key来将消息分配到指定区, 如果没有key则随机分配到某个区
    //          KeyedMessage<Integer, String> keyedMessage = new KeyedMessage<Integer, String>("test", 1, message);
                producer.send(keyedMessage);
                System.out.println("send: " + message);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
             
    //      producer.close();
        }
     
    }
     
    /**
     * 自定义分区类
     *
     */
    class MyPartition implements Partitioner {
     
        public int partition(Object key, int numPartitions) {
            return key.hashCode()%numPartitions;
        }
         
    }






    附件列表

    • 相关阅读:
      springmvc单Redis实例实现分布式锁(解决锁超时问题)
      出现Please make sure you have the correct access rights and the repository exists.问题解决
      微信小程序确保获取到token值之后再执行请求
      微信小程序api封装
      微信小程序 没有找到可以构建的npm包
      vscode开发微信小程序使用less(插件Easy WXLESS)
      深入理解移动端响应式(非原创)
      git push后出现错误 ![rejected] master -> master(non-fast-forward) error:failed to push some refs to 'XXX'
      微信小程序星星评价
      更改微信小程序的组件默认样式
    • 原文地址:https://www.cnblogs.com/lishouguang/p/4560559.html
    Copyright © 2020-2023  润新知