package com.muyu.server.config;

import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.Deserializer;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author liuxinyue
 * @Package：com.muyu.mqtt.configure
 * @Project：cloud-server
 * @name：KafkaConsumerConfig
 * @Date：2024/9/28 23:42
 */
@Configuration
public class KafkaConsumerConfig {
    @Bean
    public KafkaConsumer kafkaConsumer() {
        Map<String, Object> configs = new HashMap<>();
        //kafka服务端的IP和端口,格式:(ip:port)
        configs.put("bootstrap.servers", "47.101.53.251:9092");
        //开启consumer的偏移量(offset)自动提交到Kafka
        configs.put("enable.auto.commit", true);
        //consumer的偏移量(offset) 自动提交的时间间隔,单位毫秒
        configs.put("auto.commit.interval", 5000);
        //在Kafka中没有初始化偏移量或者当前偏移量不存在情况
        //earliest, 在偏移量无效的情况下, 自动重置为最早的偏移量
        //latest, 在偏移量无效的情况下, 自动重置为最新的偏移量
        //none, 在偏移量无效的情况下, 抛出异常.
        configs.put("auto.offset.reset", "latest");
        //请求阻塞的最大时间(毫秒)
        configs.put("fetch.max.wait", 500);
        //请求应答的最小字节数
        configs.put("fetch.min.size", 1);
        //心跳间隔时间(毫秒)
        configs.put("heartbeat-interval", 3000);
        //一次调用poll返回的最大记录条数
        configs.put("max.poll.records", 500);
        //指定消费组
        configs.put("group.id", "kafka_grop");
        //指定key使用的反序列化类
        Deserializer keyDeserializer = new StringDeserializer();
        //指定value使用的反序列化类
        Deserializer valueDeserializer = new StringDeserializer();
        //创建Kafka消费者
        KafkaConsumer kafkaConsumer = new KafkaConsumer(configs, keyDeserializer, valueDeserializer);
        return kafkaConsumer;
    }
}
