史上最差的kafka教程第四天(spring整合kafka)

导入依赖 

复制代码
         <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-streams</artifactId>
            <version>2.4.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>2.4.3.RELEASE</version>
        </dependency>
复制代码

配置可以采用之前的KafkaConfiguration

生产者

复制代码
@RestController
public class KafkaController {

    @Autowired
    private KafkaTemplate<String,Object> kafkaTemplate;

    @PostMapping("/user/save")
    public boolean saveUser(@RequestBody User user){
        kafkaTemplate.send("userTopic",user);
        return true;
    }
}
复制代码

 

消费者

复制代码
@Component
public class ConsumerListener {

    @KafkaListener(id="demo",topics = "userTopic")
    public void onMessage(User user){
        //insertIntoDb(buffer);//这里为插入数据库代码
        System.out.println(user);
    }
}
复制代码

指定分区消费者

复制代码
@Component
public class ConsumerListener {
  @KafkaListener(topicPartitions =
{ @TopicPartition(topic = "testTopic",
partitions = { "0", "2" }))
  public void onMessage(User user){ /
    System.out.println(user); } }
复制代码

 

手动提交offset(假设消费异常,本次offset不提交,重启服务后会重新消费,或者采用定时器定时重启监听器,后续会写一个通用的spring-kafka可用方案)

首先修改KafkaConfiguration类的consumerProps的offset自动提交属性改为false

1
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);

  

复制代码
 
@Component
public class ConsumerListener {

    @KafkaListener(topics = "userTopic")
    public void onMessage(ConsumerRecord consumerRecord, Acknowledgment ack){
        Object value = consumerRecord.value();
if (null == value) {
log.error("kafka消费数据为空");
}
log.info("KafkaConsumer1 消费者开始消费接受到的数据》》》》》》》》"+(String) value.toString());
ack.acknowledge(); } }
复制代码
posted @   慧剑仙  阅读(324)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示