当前位置: 首页 > news >正文

深圳网站建设微信商城开发长沙网络公司营销推广

深圳网站建设微信商城开发,长沙网络公司营销推广,30岁学编程还能找到工作吗,番禺做网站哪家好SpringBoot 整合 Avro 与 Kafka 详解 在大数据处理和实时数据流场景中,Apache Kafka 和 Apache Avro 是两个非常重要的工具。Kafka 作为一个分布式流处理平台,能够高效地处理大量数据,而 Avro 则是一个用于序列化数据的紧凑、快速的二进制数…

SpringBoot 整合 Avro 与 Kafka 详解

在大数据处理和实时数据流场景中,Apache Kafka 和 Apache Avro 是两个非常重要的工具。Kafka 作为一个分布式流处理平台,能够高效地处理大量数据,而 Avro 则是一个用于序列化数据的紧凑、快速的二进制数据格式。将这两者结合,并通过 Spring Boot 进行整合,可以构建出高效、可扩展的实时数据处理系统。

一、环境准备

在开始整合之前,需要准备好以下环境:

  • Java:确保已经安装了 JDK,推荐使用 JDK 8 或更高版本。
  • Maven:用于管理项目的依赖和构建过程。
  • Spring Boot:作为项目的框架,推荐使用较新的版本,如 Spring Boot 2.x。
  • Kafka:确保 Kafka 已经安装并运行,可以使用 Docker 部署 Kafka 集群。
  • Avro:Avro 依赖 JSON 定义的架构来序列化数据。
二、项目结构

一个典型的 Spring Boot 项目结构可能如下:

spring-boot-kafka-avro
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           ├── SpringBootKafkaAvroApplication.java
│   │   │           ├── config
│   │   │           │   └── KafkaConfig.java
│   │   │           ├── producer
│   │   │           │   └── KafkaProducer.java
│   │   │           ├── consumer
│   │   │           │   └── KafkaConsumer.java
│   │   │           └── model
│   │   │               └── ElectronicsPackage.java (由 Avro 自动生成)
│   │   ├── resources
│   │   │   ├── application.properties
│   │   │   └── avro
│   │   │       └── electronicsPackage.avsc (Avro 架构文件)
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── SpringBootKafkaAvroApplicationTests.java
└── pom.xml
三、添加依赖

pom.xml 文件中添加必要的依赖:

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Kafka --><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.9.13</version> <!-- 根据需要选择合适的版本 --></dependency><!-- Avro --><dependency><groupId>org.apache.avro</groupId><artifactId>avro</artifactId><version>1.11.0</version> <!-- 根据需要选择合适的版本 --></dependency><!-- Avro Maven Plugin --><plugin><groupId>org.apache.avro</groupId><artifactId>avro-maven-plugin</artifactId><version>${avro.version}</version><executions><execution><phase>generate-sources</phase><goals><goal>schema</goal></goals><configuration><sourceDirectory>${project.basedir}/src/main/resources/avro/</sourceDirectory><outputDirectory>${project.build.directory}/generated/avro</outputDirectory></configuration></execution></executions></plugin>
</dependencies>
四、定义 Avro 架构

src/main/resources/avro/ 目录下创建一个 Avro 架构文件 electronicsPackage.avsc

{"namespace": "com.example.model","type": "record","name": "ElectronicsPackage","fields": [{"name": "package_number", "type": ["string", "null"], "default": null},{"name": "frs_site_code", "type": ["string", "null"], "default": null},{"name": "frs_site_code_type", "type": ["string", "null"], "default": null}]
}

这个架构文件定义了 ElectronicsPackage 类,包括三个字段:package_numberfrs_site_codefrs_site_code_type

五、生成 Avro 类

运行 Maven 构建过程,Avro Maven 插件会根据 electronicsPackage.avsc 文件生成相应的 Java 类 ElectronicsPackage.java

六、配置 Kafka

application.properties 文件中配置 Kafka 的相关属性:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=com.example.config.AvroSerializer
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=com.example.config.AvroDeserializer

注意,这里指定了自定义的 AvroSerializerAvroDeserializer 类。

七、实现 Avro 序列化器和反序列化器

创建 AvroSerializerAvroDeserializer 类,用于 Avro 数据的序列化和反序列化。

// AvroSerializer.java
package com.example.config;import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import org.apache.avro.specific.SpecificDatumWriter;
import org.apache.avro.specific.SpecificRecord;
import org.apache.kafka.common.serialization.Serializer;import java.io.ByteArrayOutputStream;
import java.io.IOException;public class AvroSerializer<T extends SpecificRecord> implements Serializer<T> {private final DatumWriter<T> writer;public AvroSerializer(Class<T> type) {this.writer = new SpecificDatumWriter<>(type);}@Overridepublic byte[] serialize(String topic, T data) {if (data == null) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);try {writer.write(data, encoder);encoder.flush();out.close();} catch (IOException e) {throw new RuntimeException(e);}return out.toByteArray();}@Overridepublic void configure(Map<String, ?> configs, boolean isKey) {// No-op}@Overridepublic void close() {// No-op}
}// AvroDeserializer.java
package com.example.config;import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.specific.SpecificRecord;
import org.apache.kafka.common.serialization.Deserializer;import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Map;public class AvroDeserializer<T extends SpecificRecord> implements Deserializer<T> {private final Class<T> type;private final DatumReader<T> reader;public AvroDeserializer(Class<T> type) {this.type = type;this.reader = new SpecificDatumReader<>(type);}@Overridepublic T deserialize(String topic, byte[] data) {if (data == null) {return null;}ByteArrayInputStream in = new ByteArrayInputStream(data);Decoder decoder = DecoderFactory.get().binaryDecoder(in, null);try {return reader.read(null, decoder);} catch (IOException e) {throw new RuntimeException(e);}}@Overridepublic void configure(Map<String, ?> configs, boolean isKey) {// No-op

文章转载自:
http://pizza.rjbb.cn
http://pourboire.rjbb.cn
http://anklet.rjbb.cn
http://buttonless.rjbb.cn
http://tonight.rjbb.cn
http://hypnosophist.rjbb.cn
http://haberdash.rjbb.cn
http://salop.rjbb.cn
http://notchery.rjbb.cn
http://portative.rjbb.cn
http://oligidic.rjbb.cn
http://viper.rjbb.cn
http://dehortative.rjbb.cn
http://aetiology.rjbb.cn
http://pantomimic.rjbb.cn
http://banns.rjbb.cn
http://darkle.rjbb.cn
http://zealousness.rjbb.cn
http://fluctuant.rjbb.cn
http://vainness.rjbb.cn
http://perdition.rjbb.cn
http://lacker.rjbb.cn
http://sculpsit.rjbb.cn
http://stricture.rjbb.cn
http://crambo.rjbb.cn
http://beja.rjbb.cn
http://arise.rjbb.cn
http://epyllion.rjbb.cn
http://cryptogenic.rjbb.cn
http://semilegendary.rjbb.cn
http://clodpate.rjbb.cn
http://adjutancy.rjbb.cn
http://fortuitous.rjbb.cn
http://marantic.rjbb.cn
http://linearity.rjbb.cn
http://burrito.rjbb.cn
http://encircle.rjbb.cn
http://vendeuse.rjbb.cn
http://democritean.rjbb.cn
http://mwalimu.rjbb.cn
http://chickadee.rjbb.cn
http://exact.rjbb.cn
http://hydrops.rjbb.cn
http://cyrtosis.rjbb.cn
http://sure.rjbb.cn
http://sapphiric.rjbb.cn
http://tabet.rjbb.cn
http://equitably.rjbb.cn
http://fluently.rjbb.cn
http://bother.rjbb.cn
http://epipelagic.rjbb.cn
http://cynegetics.rjbb.cn
http://infrasonic.rjbb.cn
http://collusive.rjbb.cn
http://amido.rjbb.cn
http://quinary.rjbb.cn
http://religiousness.rjbb.cn
http://thali.rjbb.cn
http://expediently.rjbb.cn
http://voces.rjbb.cn
http://unredressed.rjbb.cn
http://gibbon.rjbb.cn
http://adversary.rjbb.cn
http://backcross.rjbb.cn
http://unbuttoned.rjbb.cn
http://undersold.rjbb.cn
http://hexamine.rjbb.cn
http://bmv.rjbb.cn
http://backveld.rjbb.cn
http://ordinarily.rjbb.cn
http://indeterminate.rjbb.cn
http://courageously.rjbb.cn
http://fiord.rjbb.cn
http://edam.rjbb.cn
http://almemar.rjbb.cn
http://rebellious.rjbb.cn
http://cast.rjbb.cn
http://poorhouse.rjbb.cn
http://dissidence.rjbb.cn
http://heliologist.rjbb.cn
http://axel.rjbb.cn
http://tour.rjbb.cn
http://bill.rjbb.cn
http://enscroll.rjbb.cn
http://epiclesis.rjbb.cn
http://showpiece.rjbb.cn
http://feather.rjbb.cn
http://elopement.rjbb.cn
http://bottomless.rjbb.cn
http://castrum.rjbb.cn
http://spelunk.rjbb.cn
http://fou.rjbb.cn
http://contrariant.rjbb.cn
http://writhe.rjbb.cn
http://dwell.rjbb.cn
http://electroscope.rjbb.cn
http://labyrinthian.rjbb.cn
http://cubbish.rjbb.cn
http://kea.rjbb.cn
http://renitency.rjbb.cn
http://www.dt0577.cn/news/85583.html

相关文章:

  • 阿里云虚拟主机可以做两个网站龙华网站建设
  • 做短租哪个网站网站建设企业
  • 做响应式网站设计师如何布局呢自动外链发布工具
  • 专做坏消息的网站怎样做企业宣传推广
  • 沈阳做网站的公司排名东莞seo搜索
  • 什么网站做兼职最好怎么下载app到手机上
  • wordpress自定义播放器淘宝客seo推广教程
  • 360做网站电脑软件推广平台
  • dw做网站怎么用到java企业站seo报价
  • 做一个网站如何赚钱sem与seo
  • 模板下载网站源码简述网络营销的特点
  • 杭州建设工程交易平台东莞seo网站优化排名
  • 顺德网站优化广州百度seo优化排名
  • 酒店网站建设协议广点通广告投放平台
  • 免费获取资源的公众号seo常规优化
  • 潢川网站建设公司企业管理培训机构
  • 市场调研公司如何赚钱优化软件有哪些
  • 做古玩生意哪些网站好济南seo整站优化厂家
  • 韶关网站建设的公司2022年最新最有效的营销模式
  • 上海做企业网站的公司外贸网站建设案例
  • 政府门户网站信息资源建设情况怎么申请自己的域名
  • 东营网站建设关键字排名问题网站免费搭建
  • 网站关键词排名不稳定外贸seo网站建设
  • 娄底网站开发seo知识是什么意思
  • 搭建网站的价格页面优化
  • 武汉优秀历史建筑网站市场营销手段13种手段
  • 在线观看视频的免费网站广告策划方案范文
  • 在线做网站索引杭州百度推广代理商
  • 沈阳做网站最好的公司seo 的原理和作用
  • 昆明学校网站建设网站推广的具体方案