kafka重复消费_Spring Boot无缝对接Kafka实现生产者消费者

Spring Boot无缝对接Kafka实现生产者消费者

5594a09470a54e98159deef885627548.png

一、Spring Boot版本

本文采用的Spring Boot版本是2.1.6.RELEASE

org.springframework.boot

spring-boot-starter-parent

2.1.6.RELEASE

引入Kafka的依赖

org.springframework.kafka

spring-kafka

2.2.6.RELEASE

bootstrap.yml添加Kafka配置:

spring.kafka.producer.bootstrap-servers=192.168.3.4:9092

ca775b6c070a864770da8a4fe1168532.png

二、Kafka基础知识

生产者

Kafka使用Producer作为生产者,将Broker推入生产数据

消息载体

Kafka使用Broker作为消息载体,由多个Kakfa服务器组成

消费者

Kafka使用Consumer作为消费者,从消息载体中获取Topic字节数据

Topic

Kafka使用Topic对消息进行拆分,通过将数据存放在不同Topic中,将消息村放入Topic中进行获取

消息生产者重试机制配置:

# 当写入失败时,重试次数。主节点失效,一个重复节点会替代成为主节点,此时可能出现写入失败,

# 当重试次数=0时,生产者不会重复。重试重发,此时重复节点完全成为领导节点,不会产生消息丢失。

spring.kafka.producer.retries=0

# 可以批量发送消息的个数,生产者积累到一定数据,一次发送

spring.kafka.producer.batch-size=8148

# 生产者积累数据一次发送,缓存大小达到buffer.memory就发送数据

spring.kafka.producer.buffer-memory=2911568

#生产者要求主节点在考虑完成请求之前收到的确认数,用于控制发送记录在服务端的持久化,

spring.kafka.producer.acks=1

# 指定消息key和消息体的编解码方式

spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer

spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

614ee599cef29d8d966803b48eba14ad.png

2.1生产者发送Kafka消息

@Autowired

private KafkaTemplate kafkaTemplate;

@GetMapping("/topic/send")

public boolean topicSend(@RequestParam String msg){

kafkaTemplate.send("defaultTopic",msg);

return true;

}

94bf6afa17b319f6dae701218524c86c.png

2.2消费者接收数据

消费者Kafka配置:

# 指定Default Consumer分组 id --> 由于在kafka中,同一组中的消费者不会读取到同一个msg,依靠分组设置组名

spring.kafka.consumer.group-id=defaultTopic

# 最小和最大才有效,如果最小重新0开始读取,如果是最大从logfile的offset读取。一般情况下我们都是设置最小化

spring.kafka.consumer.auto-offset-reset=earliest

# 设置自动提交offset

spring.kafka.consumer.enable-auto-commit=true

#如果自动提交为true,则Consumer偏移自动提交给Kafka的频率,默认值为3000。

spring.kafka.consumer.auto-commit-interval=200

消费者接收数据:

@KafkaListener(topics = "defaultTopic")

public void onMessage(String msg){

System.out.println(msg);

}

6187ff93b5cd319977ab3c6e1710550f.png

2.3简单通信过程

2.3.1生产者

@Autowired

private KafkaTemplate kafkaTemplate;

/**

* 发送简单消息

* @param msg

* @return

*/

public String sendSimple(String msg){

kafkaTemplate.send(KafkaRestConfig.TOPIC1,msg);

return msg;

}

/**

* 发送对象消息

* @param obj

* @return

*/

public String sendTopicObj(Object testobj){

String msg = JSON.toJSONString(testobj);

kafkaTemplate.send(KafkaRestConfig.TOPIC2,msg);

return “成功”;

}

954a747d29d140ddf043247f0845c5f8.png

2.3.2消费者

@KafkaListener(topics = "kafka-simple")

public void onMessage1(String msg){

log.info(msg);

log.info("kafka-simple接收结果:{}",msg);

}

@KafkaListener(topics = "kafka-object")

public void onMessage2(String object){

log.info(object);

Object obj = JSONUtil.parse(object);

log.info("kafka-object接收结果:{}",obj.toString());

}

abfd6daf611db8ee95c154ad582e6252.png

三、总结

以上就是Kafka的简单通信,笔者水平有限,还望指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值