• java 架构之路(队列)kafka


    什么是kafka

    kafka是一种高吞吐量的分布式发布订阅消息系统
    主要是三个功能

    1. 发布和订阅记录的流,类似于消息队列或者企业级消息系统。
    2. 以容错的、持久的方式存储记录流
    3. 当发生时处理记录流。
    复制代码

    SpringBoot集成kafka

    新建SpringBoot项目

    引入kafka

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

    yml 文件中添加配置

    spring:
      kafka:
        # Kafka集群
        bootstrap-servers: xxxxxxx
    复制代码

    Hello Kafka

    生产者

    public class KafkaProducer {
        @Autowired
        private KafkaTemplate<String, Object> kafkaTemplate;
        public void sendMessage(String normalMessage) {
            kafkaTemplate.send("topic", normalMessage);
        }
    }
    复制代码

    消费者

    @Component
    public class KafkaConsumer {
        // 消费监听
        @KafkaListener(topics = {"topic"})
        public void onMessage1(ConsumerRecord<?, ?> record){
            // 消费的哪个topic、partition的消息,打印出消息内容
            System.out.println("简单消费:"+record.topic()+"-"+record.partition()+"-"+record.value());
        }
    }
    复制代码

    生产者

    1、带回调的生产者

        @Autowired
        private KafkaTemplate<String, Object> kafkaTemplate;
        public void sendMessage(String normalMessage) {
            ListenableFuture<SendResult<String, String>> future = kafkaTemplate
                        .send("topic", normalMessage);
            future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
                @Override
                public void onSuccess(SendResult<String, String> result) {
                    onSendSuccess(result, k, v);
                }
    
                @Override
                public void onFailure(Throwable ex) {
                    System.out.println("发送消息成功:" + result.getRecordMetadata().topic() + "-"
                        + result.getRecordMetadata().partition() + "-" + result.getRecordMetadata().offset());
                }
            });  
        }
    复制代码

    消费者

    
        public String getPubSubTopic() {
            return "topic";
        }
    
        public String getSubscriber() {
            return "group";
        }
        @SuppressWarnings({ "rawtypes", "unchecked" })
        @KafkaListener(groupId = "#{__listener.subscriber}", topics = "#{__listener.pubSubTopic.split(',')}", containerFactory = "batchFactory")
        public void listen(ConsumerRecord<String, String> records) {
        
        }
    复制代码

    属性解释:

    ① id:消费者ID;

    ② groupId:消费组ID;

    ③ topics:监听的topic,可监听多个;

    ④ topicPartitions:可配置更加详细的监听信息,可指定topic、parition、offset监听。

    批量消费者

    # 设置批量消费
    spring.kafka.listener.type=batch
    # 批量消费每次最多消费多少条消息
    spring.kafka.consumer.max-poll-records=50
    复制代码
    public void onMessage(List<ConsumerRecord<?, ?>> records) {}
    复制代码
     
  • 相关阅读:
    ウェブプロジャクトがジャワープロジャクトに参照する方法
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    财富定律
    jsp文件下载完整方法
    使用Axis开发Web Service程序
    CDH安装指南——酒仙网技术
    linux下 putty 的痛苦编译之路
    博客园
    windows 下 cannal & otter 配置
    Go 1.8 正式发布,编译时间比 Go 1.7 提高约 15%
  • 原文地址:https://www.cnblogs.com/ming569/p/13693204.html
Copyright © 2020-2023  润新知