初识kafka 之 吞吐量控制

buffer.memory 缓冲区大小,默认 32M

properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,33554432);

batch.size 批次大小,默认16k

properties.put(ProducerConfig.BATCH_SIZE_CONFIG,16384);

linger.ms 等待时间,一般为1到100ms,默认0。

properties.put(ProducerConfig.LINGER_MS_CONFIG,1);

compression.type 压缩类型,默认 none,可配置值 gzip、snappy、lz4 和 zstd

properties.put(ProducerConfig.COMPRESSION_TYPE_CONFIG,"snappy");

示例

package com.lzh.kafka;

import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;
import java.util.concurrent.ExecutionException;

// 本地idea通过kafka发送消息
public class CustomProducer {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 1.配置
        Properties properties = new Properties();

        // 连接集群
        // 给kafka对象添加配置信息 bootstrap.servers
        // 生产者连接集群所需的 broker 地址清单
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"bigdata01:9092,bigdata02:9092");


        // 指定发送消息的key和value的序列化类型。一定要写全类名。
        // key,value序列化 key.serializer,value.serializer

        // key序列化
        // 全类名与下等价: properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

        // value序列化
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());

        // buffer.memory 缓冲区大小,默认 32M
        properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,33554432);

        // batch.size 批次大小,默认16k
        properties.put(ProducerConfig.BATCH_SIZE_CONFIG,16384);

        // linger.ms 等待时间,一般为1到100ms,默认0。
        properties.put(ProducerConfig.LINGER_MS_CONFIG,1);

        // compression.type 压缩类型,默认 none,可配置值 gzip、snappy、lz4 和 zstd
        properties.put(ProducerConfig.COMPRESSION_TYPE_CONFIG,"snappy");



        // 2.创建 kafka 生产者对象
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(properties);

        // 3.发送数据
        // 调用 send 方法,发送消息
        for (int i = 1; i < 5; i++) {

            // 异步发送,无回调函数
            if (i == 1) {
                kafkaProducer.send(new ProducerRecord<String, String>("Mytopic","异步发送,无回调函数\n开始报数:" )); // 无回调函数
            }

            // 异步发送,有回调函数
            kafkaProducer.send(new ProducerRecord<String, String>("Mytopic", "" + i), new Callback() { // 有回调函数
                public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                    if (e == null) {
                        System.out.println("主题"+ recordMetadata.topic() +"已异步发送消息到"+ recordMetadata.partition() +"分区");
                    }
                }
            });
        }

        // 同步发送,无回调函数 get()
        kafkaProducer.send(new ProducerRecord<String, String>("Mytopic","同步发送,无回调函数" )).get(); // 无回调函数

        // 同步发送,有回调函数 get()
        kafkaProducer.send(new ProducerRecord<String, String>("Mytopic", "同步发送,有回调函数"), new Callback() {
            public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                if (e == null) {
                    System.out.println("主题"+ recordMetadata.topic() +"已同步发送消息到"+ recordMetadata.partition() +"分区");
                }
            }
        }).get();

        // 4.关闭资源
        kafkaProducer.close();

    }
}
本地idea通过kafka发送消息

 

posted on 2022-04-14 15:58  Simple-Sir  阅读(201)  评论(0编辑  收藏  举报

导航