Kafka之Producer生产者
Producer工作流程
producer首先使用一个线程,将待发送的消息封装进一个ProducerRecord类实例,然后将其序列化给分区器,再由后者确定了目标分区后一同发送到位于producer程序的一块内存缓冲区。而producer的另一个工作线程则负责实时的从该缓存区中提取准备就绪的消息封装进一个批次,统一发给对应的broker。如下图:
SpringBoot集成Kafka
以下是springboot集成kafka相关的代码以及配置,我们这边springboot选用的版本是2.3.5.RELEASE,对应的org.springframework.kafka版本是2.5.7。
我这边是直接在项目中用的,所以我这边的代码只是与kafka相关的,不是很完整。
导入依赖
导入kafka依赖
<!-- 引入kafka依赖 -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
参数自定义配置
在配置文件中配置我们需要用到的参数,我们这边用的是yaml文件格式。
spring:
kafka:
bootstrap-servers: localhost:9092,localhost:9093,localhost:9094
producer:
acks: -1
bootstrap-servers: localhost:9092,localhost:9093,localhost:9094
buffer-memory: 40960
batch-size: 4096
retries: 3
compression-type: none
client-id: training-platform
linger-ms: 1
request-timeout: 60000
interceptor-classes: "com.vortex.training.platform.mq.kafka.KafkaProducerInterceptor"
topic:
name: search_channel_data
partitions: 3
replicas: 3
使用@ConfigurationProperties注解,将参数注入到对象
/**
* @author : light
* @date: 2020/11/10 14:32
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "spring.kafka")
public class SpringKafkaEnvConfig {
private String bootstrapServers;
private Topic topic;
private Producer producer;
/**
* producer 消息发送者配置
*/
@Data
public static class Producer {
private String bootstrapServers;
private String acks;
private Long bufferMemory;
private Integer batchSize;
private Integer retries;
private String compressionType;
private String clientId;
private Long lingerMs;
private Long requestTimeout;
private String interceptorClasses;
}
/**
* topic相关配置
*/
@Data
public static class Topic {
private String name;
private Integer partitions;
private Integer replicas;
}
}
自定义Topic以及Producer相关配置
/**
* @author : light
* @date: 2020/11/10 14:14
*/
@Component
@EnableKafka
public class SpringKafkaConfig {
@Autowired
private SpringKafkaEnvConfig springKafkaEnvConfig;
/**
* 创建一个kafka管理类,相当于rabbitMQ的管理类rabbitAdmin,没有此bean无法自定义的使用adminClient创建topic
* @return KafkaAdmin
*/
@Bean
public KafkaAdmin