Springboot+Kafka

1. Overview

2. Kafka 搭建

3. 初试

  • 依赖

    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
        <version>2.1.7.RELEASE</version>
    </dependency>
    
  • 配置

    spring:
        kafka:
            bootstrap-servers: localhost:9092
            consumer:
                group-id: myGroup
    
  • 消费

    topic 为测试时建立的 topic

    @Component
    public class KafkaConsumer {
    
        @KafkaListener(topics = "test")
        public void consume(String content){
            System.out.println(content);
        }
    }
    
  • 启动

    启动项目,并且在前面自己安装的 Kafka Producer 产生消息,可以看到启动的项目里面收到消息:

4. Kafka架构

4.1. 术语

  • Broker

    Kafka 集群包含一个或多个服务器,这种服务器被称为 broker

  • Topic

    每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic 。(物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处)

  • Partition

    Parition 是物理上的概念,每个 Topic 包含一个或多个 Partition.

  • Producer

    负责发布消息到 Kafka broker

  • Consumer

    消息消费者,向 Kafka broker 读取消息的客户端。

  • Consumer Group

    每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 groupname ,若不指定 group name 则属于默认的 group)。

5. 更多用法

  • 多消费者组消费同一条消息

    根据 Kafka 的设计原理可知,如果两个不同的 consumer 分别处于两个不同的 consumer group ,那么它们就可以同时消费同一条消息:

    @KafkaListener(topics = "test",groupId = "myGroup")
    public void consume(String content){
        System.out.println("myGroup message: "+content);
    }
    
    @KafkaListener(topics = "test",groupId = "myGroup2")
    public void consume2(String content){
        System.out.println("myGroup2 message: "+content);
    }
    
  • 批量消费消息

    配置:

    @Bean("batchContainerFactory")
    public KafkaListenerContainerFactory<?> batchContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<Object, Object> containerFactory = new ConcurrentKafkaListenerContainerFactory<>();
        containerFactory.setConsumerFactory(consumerFactory());
        containerFactory.setConcurrency(4);
        containerFactory.setBatchListener(true); //批量消费
    
        return containerFactory;
    }
    

    消费:

    @KafkaListener(topics = "test", groupId = "myGroup3", containerFactory = "batchContainerFactory")
    public void consume3(List<String> content) {
        System.out.println("myGroup3 list->string message: " + content.stream().reduce((a, b) -> a + b).get());
    }
    
Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。而Kafka是一个分布式的发布-订阅消息系统,可以处理大量数据并提供高吞吐量。在Spring Boot应用程序使用Kafka可以通过导入spring-kafka的starter依赖来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合Kafka](https://blog.csdn.net/m0_37294838/article/details/127253991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [springboot整合kafka](https://blog.csdn.net/m0_74642813/article/details/131307133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [springboot-kafka](https://blog.csdn.net/qq_47848696/article/details/125422997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值