docker安装Kafka,SpringBoot整合Kafka

#拉取镜像
docker pull wurstmeister/zookeeper
#运行容器
docker run --restart=always --name zookeeper -p 2181:2181 \
-v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper

#拉取镜像
docker pull wurstmeister/kafka
 
#运行容器
docker run --restart=always --name kafka -p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.56.1:2181/kafka \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.56.1:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-v /etc/localtime:/etc/localtime -d wurstmeister/kafka

# 这里将8088映射到容器的8080端口,因为ui默认是从8080启动的,否则不能访问UI界面
docker run --name=kafka-ui \
-e KAFKA_CLUSTERS_0_NAME=kafka-cluster-name \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=192.168.168.160:9092 \
-p 8088:8080 \
-d provectuslabs/kafka-ui:latest
SpringBoot整合Kafka
  1. 引入依赖
    <!-- Kafka 相关依赖 -->
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>
  1. 配置文件:
    在application.properties文件中添加Kafka的相关配置。
spring:
  kafka:
    bootstrap-servers: localhost:9092

    consumer:
      group-id: article-group
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:

      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
  1. 编写生产者(这是使用Kafka实现双写一致性的示例代码,更新完数据就将实体id发给Kafka)
    @Override
    public ResponseResult updateArticleByKafka(ApArticle article) {

        // 修改数据库
        apArticleMapper.updateById(article);
        // 通过Kafka去通知更新缓存
        kafkaTemplate.send("article-events",article.getId()+"");

        return ResponseResult.okResult();
    }
  1. 编写消费者(在消费者中直接对这个id的数据进行删除缓存处理,再次查询这个数据自然会重建缓存)
@Component
@Slf4j
public class ArticleUpdateCacheKafkaConsumerListener {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    
    @KafkaListener(topics = "article-events")
    public void receiveMessage(String message) {
        // 根据获得的数据去删除缓存
        redisTemplate.delete(ARTICLE_KEY + message);
        log.debug("Received message: " + message);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YonChao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值