Java 发送信息到 kafka 的util

使用Java代码,发送数据到 kafka 去。

public class KafkaSendUtils {

    private static Producer<String, String> producer;


    /**
     * 生产者,注意kafka生产者不能够从代码上生成主题,只有在服务器上用命令生成
     *     
     */
    private synchronized static void initProperties(KafkaConfiguration setting) {
        if (producer == null) {
            Properties props = new Properties();
            props.put("bootstrap.servers", setting.getServers());
            props.put("acks", setting.getAcks());
            props.put("retries", setting.getRetries());
            props.put("batch.size", setting.getBatchSize());
            props.put("linger.ms", setting.getLingerMs());
            props.put("buffer.memory", setting.getBufferMemory());
            props.put("key.serializer", setting.getKeySerializer());
            props.put("value.serializer", setting.getValueSerializer());
            producer = new KafkaProducer<>(props);
        }
    }

    /**
     * 发送对象消息 至kafka上,调用json转化为json字符串,应为kafka存储的是String。
     *
     * @param jsonString json信息
     */
    public static void sendMsgToKafka(String jsonString, KafkaConfiguration setting) {
        initProperties(setting);
        producer.send(new ProducerRecord<>(setting.getTopic(), String.valueOf(System.currentTimeMillis()), jsonString));
    }

}

使用到配置信息(实现到接口,没啥特别到,就是起到一个标记到作用。)

/**
 * 发数据到kafka的相关配置信息
 * (@JSONField(ordinal = 1) 对象转json字符串时key按设置顺序输出)
 *
 * @author lxk on 2018/10/18
 */
@Data
public class KafkaConfiguration implements ConsumerConfigurationInstance {
    /**
     * kafka 服务器ip:端口号,集群用逗号分隔
     * 例如:192.168.1.46:9092
     */
    @JSONField()
    private String servers;
    /**
     * 例如:all
     */
    @JSONField(ordinal = 1)
    private String acks;
    /**
     * 例如:0
     */
    @JSONField(ordinal = 2)
    private int retries;
    /**
     * 例如:16384
     */
    @JSONField(ordinal = 3)
    private int batchSize;
    /**
     * 例如:1
     */
    @JSONField(ordinal = 4)
    private int lingerMs;
    /**
     * 例如:33554432
     */
    @JSONField(ordinal = 5)
    private Long bufferMemory;
    /**
     * 例如:org.apache.kafka.common.serialization.StringSerializer
     */
    @JSONField(ordinal = 6)
    private String keySerializer;
    /**
     * 例如:org.apache.kafka.common.serialization.StringSerializer
     */
    @JSONField(ordinal = 7)
    private String valueSerializer;
    /**
     * kafka的topic
     */
    @JSONField(ordinal = 8)
    private String topic;

    @Override
    public String toString() {
        return "KafkaConfiguration{" +
                "servers='" + servers + '\'' +
                ", acks='" + acks + '\'' +
                ", retries=" + retries +
                ", batchSize=" + batchSize +
                ", lingerMs=" + lingerMs +
                ", bufferMemory=" + bufferMemory +
                ", keySerializer='" + keySerializer + '\'' +
                ", valueSerializer='" + valueSerializer + '\'' +
                ", topic='" + topic + '\'' +
                '}';
    }

    //例如:
    //#发送 kafka 配置信息
    //kafka.servers = 192.168.1.46:9092
    //kafka.acks = all
    //kafka.retries = 0
    //kafka.batch.size = 16384
    //kafka.linger.ms = 1
    //kafka.buffer.memory = 33554432
    //kafka.key.serializer = org.apache.kafka.common.serialization.StringSerializer
    //kafka.value.serializer = org.apache.kafka.common.serialization.StringSerializer
}

这个信息发送到kafka之后,kafka里面的数据只能被消费一次,消费之后,他就不见了。所以,你在看你的数据有没有发送到kafka到时候,注意下,你使用到查看方式要是消费到方式的话,那看一下,数据就没有了,第二次再看的时候,数据就不在了,可不是你数据没发送成功。

代码简单,就是记录下笔记吧,万一啥时候再用到呢,可以,直接拿来用。

我写完文章,给自己点个赞,不过分吧,
不过分,那我可就点啦啊。
我先点为敬,你们随意。大家随意。不要客气。。。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值