记录一下学习kafka的使用以及思路

下面这是kafka的依赖

XML 复制代码
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
        </dependency>

我在学习的时候直接导入是没有导入成功的,我猜测大概的原因是我本地的仓库没有kafka的依赖,其实也就是没有下载过,所以没有指定版本号的话是在本地是找不到的所以报错,指定版本号下载了以后就可以了,后面就可以不用指定版本号了。

我们主要使用kafka里面的注解进行使用,第一个就是配置kafka,第二步就是使用kafkaTemplate进行sent方法进行发数据放到队列里面即可。

下面是配置

XML 复制代码
spring:
  kafka:
    bootstrap-servers: 156.65.20.76:9092,156.65.20.77:9092,156.65.20.78:9092 #指定Kafka集群的地址,这里有三个地址,用逗号分隔。
    listener:
      ack-mode: manual_immediate #设置消费者的确认模式为manual_immediate,表示消费者在接收到消息后立即手动确认。
      concurrency: 3  #设置消费者的并发数为5
      missing-topics-fatal: false  #设置为false,表示如果消费者订阅的主题不存在,不会抛出异常。
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer  # 设置消息键的序列化器
      value-serializer: org.apache.kafka.common.serialization.StringSerializer #设置消息值的序列化器
      acks: 1  #一般就是选择1,兼顾可靠性和吞吐量 ,如果想要更高的吞吐量设置为0,如果要求更高的可靠性就设置为-1
    consumer:
      auto-offset-reset: earliest #设置为"earliest"表示将从最早的可用消息开始消费,即从分区的起始位置开始读取消息。
      enable-auto-commit: false #禁用了自动提交偏移量的功能,为了避免出现重复数据和数据丢失,一般都是手动提交
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer  # 设置消息键的反序列化器
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer #设置消息值的反序列化器

然后是生产者使用sent方法

java 复制代码
executorService.submit(() -> {
                    try {
                        //获取内网流出带宽,并将结果封装到消息集合中
                        dealMetricDataToMessage(ALiYunConstant.ECS_INTRANET_OUT_RATE, ALiYunConstant.INTRANET_OUT_RATE_NAME, ALiYunConstant.LW_INTRANET_OUT_RATE_CODE,
                                startTime, endTime, instance, messages);
                    } catch (Exception e) {
                        log.error("获取ECS的指标数据-多线程处理任务异常!", e);
                    } finally {
                        latch.countDown();
                    }

                });
            }
            //等待任务执行完毕
            latch.await();
            //将最终的消息集合发送到kafka
            if (CollectionUtils.isNotEmpty(messages)) {
                for (int i = 0; i < messages.size(); i++) {
                    if (StringUtils.isNotBlank(messages.get(i).getValue())
                            && "noSuchInstance".equals(messages.get(i).getValue())) {
                        continue;
                    }
                  kafkaTemplate.send(topicName,  messages.get(i));
                }
            }

这里是一个线程池的发送信息的方法,但是我们只需要记住一个即可,就是kafkaTmeplate.sent(topicname,message);

然后消费者里面是这样写的

java 复制代码
// 消费监听
    @KafkaListener(topics = "zhuoye",groupId ="zhuoye-aliyunmetric")
    public void consumeExtractorChangeMessage(ConsumerRecord<String, String> record, Acknowledgment ack){
        try {
            String value = record.value();
            //处理数据,存入openTsDb
            .................
            ................
            ack.acknowledge();//手动提交
        }catch (Exception e){
            log.error("kafa-topic【zhuoye】消费阿里云指标源消息【失败】");
            log.error(e.getMessage());
        }

    }

主要就是@kafkalistener注解,然后就是使用数据就可以了。

然后其他的底层原理我们后面再去学习

相关推荐
传奇开心果编程23 分钟前
【Flutter入门练中学】第3课:滚动与列表
android·学习·flutter·ui·ios
李游Leo30 分钟前
HarmonyOS 7 + ArkTS + Image Kit 学习笔记:图像超分处理链路与 PixelMap 数据流实践【鸿蒙心迹】
笔记·学习·harmonyos
李游Leo1 小时前
HarmonyOS 7 + ArkTS + NAPI 学习笔记:Native 模块桥接、CMake 构建与跨语言调用实践【鸿蒙心迹】
笔记·学习·harmonyos
Q26433650231 小时前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
智码看视界1 小时前
技术选型指南:Pulsar vs Kafka:消息队列选型终极对比与压测
kafka·消息队列·pulsar·消息中间件·流处理·高吞吐·架构选型
边境悍匪2 小时前
蜗牛学苑 Java 智能体学习 Day49|贯穿项目 5 订单下单业务 思维导图复盘
java·开发语言·spring boot·学习·阿里云
别动我齐刘海2 小时前
ROS2 Jazzy + C++ 时间系统——Time / Clock / Duration
linux·c++·人工智能·学习·机器学习·机器人·自动驾驶
小范的技术工坊2 小时前
大模型学习操作文档(13个核心概念串讲)
人工智能·学习·算法·大模型
索端阳2 小时前
I.MX6ULL 裸机开发:LCD Framebuffer 与 RGB888 学习笔记
笔记·vscode·嵌入式硬件·学习
新思维软件2 小时前
基于无线传输的地衡系统:三节点 LoRa 组网与 MQTT 上云的分布式称重方案
分布式·stm32·单片机·嵌入式硬件·物联网·物联网开发