kafka生产者与消费者

大数据之Kafka————java来实现kafka相关操作 生产者多线程是一种常见的技术实践,可以提高消息生产的并发性和吞吐量。通过将消息生产任务分配给多个线程来并行地发送消息,可以有效地利用系统资源,加快消息的发送速度。Java中写在生产者输入内容在kafka中可以让消费者提取。(2)、Producer进行多线程操作。一、在java中配置pom。通过java来实现消费者。(2)、设置多人访问。 阅读详情


提示:这里可以添加本文要记录的大概内容:

一、 pom.xml依赖包

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>2.8.0</version>
</dependency>

二、yml配置文件

spring:
  kafka:
    listener:
      concurrency: 3  #线程数
      ack-mode: manual_immediate
      type: batch #批量
    bootstrap-servers: 192.168.1.214:9092
    # 生产者配置
    producer:
#      retries: 1 # 消息发送重试次数
      batch-size: 16384
      buffer-memory: 33554432
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      key-serializer: org.apache.kafka.common.serialization.StringSerializer

    #消费者需配置,生产者不需要
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      group-id: goodwe-touring-car-groupid-1
      auto-offset-reset: earliest #latest, earliest, none
      enable-auto-commit: false
      auto-commit-interval: 5000
      max-poll-records: 1000        #批量消费最大数量

    topic: portable_performance

#自定义项目run, 运行kafka.
custom:
  run:
    kafka: true
    
    
    
############################### 参数说明 #########################################
    consumer:
      # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D
      auto-commit-interval: 1S
      # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
      # latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)
      # earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录
      auto-offset-reset: earliest
      # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量
      enable-auto-commit: false
      # 键的反序列化方式
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      # 值的反序列化方式
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      listener:
        # 在侦听器容器中运行的线程数。
        concurrency: 5
        #listner负责ack,每调用一次,就立即commit
        ack-mode: manual_immediate
        missing-topics-fatal: false

三、消费者

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.goodwe.kafkaapi.model.constant.RedisConst;
import com.goodwe.kafkaapi.model.entity.ConsumerMessageData;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;

import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;


/**
 * @Description : kafka消费者
 *
 * @Author : LiYan
 * @CreateTime : 2023/8/16 8:35
 */
@Slf4j
@Configuration
public class KafkaConsumer {

    private static final String REDIS_KEY = RedisConst.getREDIS_PREFIX() + RedisConst.getKEY();

    @Resource
    private RedisTemplate<String,String> redisTemplate;

    @KafkaListener(topics = "#{'${spring.kafka.topic}'}", autoStartup = "${custom.run.kafka}")
    public void receive(List<ConsumerRecord<String, String>> listMessage, Acknowledgment ack) {
        try {
            log.info("----------------------开始消费消息--------------------------");

            if (CollectionUtils.isNotEmpty(listMessage)) {
                Map<String, ConsumerMessageData> dataMap = listMessage.stream()
                        .map(message -> JSON.parseObject(message.value(), ConsumerMessageData.class))
                        .collect(Collectors.toMap(ConsumerMessageData::getSn, data -> data, (oldValue, newValue) -> newValue));

                dataMap.forEach((key, value) -> {
                    redisTemplate.opsForZSet().add(REDIS_KEY, JSON.toJSONString(value), System.currentTimeMillis());
                });
            }
        } catch (Exception ex) {
            log.info("【断点续传处理】消费断点续传数据error;", ex);
        } finally {
            ack.acknowledge();
        }
    }
}

四、生产者

@SpringBootTest
class KafkaApiApplicationTests {

    @Resource
    private KafkaTemplate<String, String> kafkaTemplate;

    @Test
    public void testRedis(){
        List<ConsumerMessageData> messageData = messageData();
        for (ConsumerMessageData data : messageData) {
            String topic = "portable_performance";
            kafkaTemplate.send(topic, JSON.toJSONString(data));
        }
    }
}


@RestController
public class KafkaController {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @PostMapping("/send")
    public void sendMessage(@RequestBody String message) {
        kafkaTemplate.send("my-topic", message);
    }

}

总结

================== 好记性不如烂笔头=========================

【分布式学习】消息中间件(MQ)学习:kafka 1,概念 Kafka是一种高吞吐量的分布式发布订阅消息系统,是观察者模式的一种实现。 1)特性 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。 支持通过Kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 Broker Kafka集群包含一个或............ 阅读详情

相关推荐

SpringBoot集成Kafka详解

我们知道,kafka中每个topic被划分为多个分区,那么生产者将消息发送到topic时,具体追加到哪个分区呢?这就是所谓的分区策略,Kafka 为我们提供了默认的分区策略,同时它也支持自定义分区策略。其路由机制为:1.若发送消息时指定了分区(即自定义分区策略),则直接将消息append到指定分区;

qq_20865839的博客 1万+

kafka生产者和消费者实例配置入门

kafka生产者和消费者实例配置入门:

nandao158的博客 1363

深入分析Kafka生产者和消费者

深入Kafka生产者和消费者Kafka生产者消息发送的流程发送方式生产者属性配置序列化器分区器Kafka消费者消费者群组消费者属性配置消费者基础概念消费者核心概念 Kafka生产者 消息发送的流程 生产者每发送一条消息需要先创建一个ProducerRecord对象,并且需要指定目标主题、消息内容,当然还可以指定消息键和分区。之后就会调用send()方法发送该对象,由于生产者需要与Kafka Broker进行网络传输,必然需要先通过序列化器对消息的键和值对象先进行序列化成字节数组,才能进行传输。 之后,分区

wzljiayou的博客 2911

kafka基本概念、springboot整合kafka、kafka常见问题

kafka基本概念、springboot整合kafka、kafka常见问题

TAaron666的博客 1709

Kafka生产者和消费者--

文章目录Kafka生产者:向broker写数据生产者概览创建生产者构造ProducerRecord发送消息到broker序列化器分区顺序性和可靠性Kafka消费者基本概念消费过程创建消费者订阅主题轮询提交反序列化器 Kafka生产者:向broker写数据 生产者概览 创建生产者 Properties props = new Properties(); props.put(“bootstrap.s...

李玉坤的博客 5884

Python Kafka 生产者-消费者模式的底层实现解析

Kafka 是由 LinkedIn 开发并开源的一款分布式流处理平台,它最初设计用于日志收集,但后来逐渐演变为一个通用的消息队列系统。Kafka 的核心概念包括主题(Topic)、分区(Partition)、副本(Replica)和偏移量(Offset)。生产者负责向 Kafka 写入数据,而消费者则从 Kafka 中读取数据。本文详细介绍了 Python Kafka 生产者-消费者模式的底层实现细节。

2501_91298224的博客 1253

kafka生产者消费者举例

Kafka是一款分布式流处理平台,它被设计用于高吞吐量、持久性、分布式的数据流处理。Kafka 简介Kafka 是一个高吞吐、分布式、基于发布订阅的消息系统。Kafka 具有高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性、高并发等特性。Kafka 应用场景日志收集:公司可以使用 Kafka 收集各种服务的日志,然后通过 Kafka 统一接口服务的方式将这些日志开放给各种消费者,例如 Hadoop、Hbase、Solr 等。消息系统:Kafka 可以解耦生产者和消费者,缓存消息等。用户活动跟踪。

分享技术,分享经验 2051

kafka在windows上进行简单的生产者消费者模型实现

kafka在windows上进行简单的生产者消费者模型实现 1.安装zookeeper并运行 下载任意版本的zk,解压之后将zoosample文件文件名改为zoo,然后编写zoo文件,其他blog肯定都有教程 dataDir=F:\zookeeper\zookeeper-3.4.14\data 就是改这个,需先创建目录 然后直接双击bin目录下的zookeeper.server就可以了,(.sh是linux系统下的脚本文件) 运行之后的效果如图 主要是这行。。 2.安装kafka并运行 我这里下载的是

xidian_xiaohang的博客 1001

Kafka的生产者和消费者模型

生产者是消息的生产者,它将消息发布到Kafka的主题(Topic)中。

2402_85246552的博客 1229

Kafka 设计之生产者与消费者

接上一篇。本文将介绍 Kafka 设计中的生产者与消费者,通过对官方文档的阅读,来加深对 Kafka 生产者和消费者设计的理解。

流华追梦的专栏 1652

Kafka系列之:Kafka生产者和消费者

Kafka系列之:Kafka生产者和消费者

zhengzaifeidelushang的博客 3550

Kafka生产者与消费者详解

什么是 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。 Kafka 的基本术语 消息:Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。 批次:为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。...

王大宝的博客 1万+

ABAP 7.40+新语法实战:用VALUE和REDUCE五分钟搞定复杂内表统计

本文详细介绍了ABAP 7.40+新语法中的VALUE和REDUCE操作符,如何高效处理复杂内表统计任务。通过实战案例展示,这些新语法能将代码量减少70%以上,显著提升开发效率和可读性,特别适合大数据量下的销售数据分析、分组统计等场景。

weixin_27219587的博客 206

kafka:Kafka生产者与消费者深度解析

设计模式生产者:异步批量+本地缓冲消费者:分区级并行+本地状态性能调优公式最大吞吐量 = min(生产者网络带宽 / 消息平均大小,消费者处理能力 / 消息处理耗时可靠性黄金法则生产者:幂等+事务+完善监控消费者:手动提交+死信队列+重试机制云原生演进客户端自适应限流基于K8s的弹性伸缩Serverless消费模式Kafka生产者和消费者的设计体现了分布式系统的核心思想:通过批处理和异步化提升吞吐量,通过分区和并行化实现水平扩展,通过精心设计的确认机制保证可靠性。

weixin_43290370的博客 1280

SRT公网点对点传输及搭建SRT流媒体服务器

SRT是一种开源传输技术,它是基于UDP协议的,与RTMP不同的是,它具有高码率低延迟的传输特性,加强了在复杂不稳定网络环境中的传输可靠性,提升了不可预测的网络环境上的流传输性能。它不像NDI那样只适用于局域网传输,它更适用于公网环境下的信号传输。 S代表Secure,即安全加密的视频流,R代表Reliable,即具有从数据严重丢包中恢复的可靠性,T代表Transport,即动态适应变化的网络状况。 在音视频数据包传输的过程中,SRT会检测并适应两个传输点之间的实时网络状况,有助于补偿由于网络的拥塞而引起的

罗宇。的媒体技术工作室 1万+

离线安装PlutoSDR硬件支持包全攻略:没有MathWorks账号也能搞定MATLAB集成

本文详细介绍了在没有MathWorks账号和网络环境的情况下,如何离线安装PlutoSDR硬件支持包并实现MATLAB集成的完整解决方案。从驱动安装、设备识别到MATLAB支持包的离线部署,提供了全面的步骤指导和常见问题排查方法,特别适合高校实验室、军工单位等内网环境使用。

js777的博客 266

kafka之生产者、消费者

一、生产者 生成者是指消息的生成者,即将消息发送到指定的Topic中的生产者。生产者可以通过特定的分区函数决定消息路由到Topic的某个分区。 1、设计原则 生产者就是将消息发送到指定的Topic中。生产者本质上就是指定具体的Topic,然后向目的端Broker Server发送ProducerRequest请求,并且通过分区函数可以指定具体的消息至特定的分区。生产者内部会动态维护与Topi...

言午玉口才 1331

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战指南,提供从零开始的中文教程。内容涵盖仿真环境搭建、实体行为控制、脚本编写,到传感器、武器系统集成与复杂想定构建,最后讲解数据记录与结果分析方法,帮助用户快速掌握这一强大的军事仿真框架。

weixin_29281941的博客 943

Kafka 生产者、消费者

2.linger.ms:如果数据迟迟未达到batch.size,sender等待linger.ms设置的时间到了之后就会发送数据。-1(all):生产者发送过来的数据,Leader和ISR队列里面的所有节点收齐数据后应答。Consumer Group(CG):消费者组,逻辑概念,由多个consumer组成。Kafka没有采用这种方式,因为由broker决定消息发送速率,很难适应所有消费者的消费速率。1:生产者发送过来的数据,Leader收到数据后应答。0:生产者发送过来的数据,不需要等数据落盘应答。

坚持做正确的事情! 1203

AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1551

C++ 核电站

问题描述 一个核电站有n个放核物质的坑,排列在一条直线上。如果连续m个坑中放入核物质就会发生爆炸,所以某些坑中不能放核物质。 本题的任务:对于给定的n和m,求不发生爆炸的放置核物质的方案总数。 输入格式 第一行两个正整数n和m,之间用一个空格隔开。2≤n≤50,2≤m≤5。 输出格式 一行一个正整数,表示方案总数。 输入样例 4 3 输出样例 13 数据规模与约定 2≤n≤50,2≤m≤5 CODE #include<bits/stdc++.h> using namespace

HybridCOW_HORSE的博客 1803

Java实现Kafka生产者和消费者的示例

Java实现Kafka生产者和消费者的方式Java实现Kafka生产者和消费者的方式Kafka简介brokerTopicPartitionProducerConsumerConsumer GroupLeaderFollower方式一:kafka-clients方式二:spring-kafka Java实现Kafka生产者和消费者的方式 Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。

weixin_43214480的博客 4191

小程序设计中的区块链应用:数字藏品实现

本文旨在为开发者提供在小程序中实现区块链数字藏品功能的完整技术方案。区块链与数字藏品的基础概念智能合约的设计与实现小程序与区块链的交互方式数字藏品的完整实现流程文章将从基础概念入手,逐步深入到技术实现层面,最后通过完整项目案例展示数字藏品在小程序中的实现方式。每个技术点都会配合代码示例和架构图进行说明。区块链:一种分布式数据库技术,通过加密算法保证数据不可篡改数字藏品:基于区块链技术的数字资产,具有唯一性和可验证性NFT。

小程序开发 1350

[C#] Kafka 生产者和消费者实现

一、背景 由于公司加强对员工操作记录的审查和追踪,程式需要对员工的进行存档记录。由于并发巨大,使用传统的直连DB进行存储的方式对DB造成巨大压力,也导致程序响应缓慢,降低了用户体验。结合DBA推动Kafka,开发Kafka调用组件,使各应用程式快速集成Kafka,实现高并发的消息队列处理方案。 二、简介 2.1 Kafka Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数

xy596356456的博客 4845

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

本文介绍了在nnunet中加入ChannelAttention的方法,按照本文教的教程,可以快速完成ChannelAttention的加入和自定义模型的跑通。

AI爱好者的博客,分享计算机领域相关知识 5800

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Kafka 生产者和消费者实例

基于命令行使用Kafka 类似scala,mysql等,命令行是初学者操作Kafka的基本方式,kafka的模式是生产者消费者模式,他们之间通讯是通过,一个公共频道完成。指定消费者组ID,在同一时刻同一消费组中只有一个线程可以去消费一个分区数据,不同的消费组可以去消费同一个分区的数据。(查看KafkaConsumerTest的运行框)由以下图可以看出生产者生产消息。在工程里面的pom.xml文件添加Kafka依赖。

m0_57781407的博客 4387

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: Feign调用携带Token
下一篇: Java数据判空
Ryan成长笔记
博客等级 码龄8年 83粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值