SpringBoot2整合Kafka

  1. 引入依赖

    xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>
  2. 生产端配置

    yaml 复制代码
    spring:
      kafka:
        bootstrap-servers: xx.xx.xx.xx:9092
        producer:
          batch-size: 16384 #批次大小,默认16k
          acks: -1 #ACK应答级别,指定分区中必须要有多少个副本收到消息之后才会认为消息成功写入,默认为1只要分区的leader副本成功写入消息;0表示不需要等待任何服务端响应;-1或all需要等待ISR中所有副本都成功写入消息
          retries: 3 #重试次数
          value-serializer: org.apache.kafka.common.serialization.StringSerializer #序列化
          key-serializer: org.apache.kafka.common.serialization.StringSerializer
          buffer-memory: 33554432 #缓冲区大小,默认32M
          client-id: kafka.producer.client.id #客户端ID
          compression-type: none #消息压缩方式,默认为none,另外有gzip、snappy、lz4
          properties:
            retry.backoff.ms: 100 #重试时间间隔,默认100
            linger.ms: 0 #默认为0,表示批量发送消息之前等待更多消息加入batch的时间
            max.request.size: 1048576 #默认1MB,表示发送消息最大值
            connections.max.idle.ms: 540000 #默认9分钟,表示多久后关闭限制的连接
            receive.buffer.bytes: 32768 #默认32KB,表示socket接收消息缓冲区的大小,为-1时使用操作系统默认值
            send.buffer.bytes: 131072 #默认128KB,表示socket发送消息缓冲区大小,为-1时使用操作系统默认值
            request.timeout.ms: 30000 #默认30000ms,表示等待请求响应的最长时间
        topic-name: kafka-topic
  3. 消费端配置

    yaml 复制代码
    spring:
      kafka:
        bootstrap-servers: xx.xx.xx.xx:9092
        consumer:
          auto-commit-interval: 5000 #自动提交消费位移时间隔时间
          value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
          key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
          max-poll-records: 500 #批量消费每次最多消费多少条消息
          enable-auto-commit: true #开启自动提交消费位移
          auto-offset-reset: latest #其他earliest、none
          group-id: kafka.consumer.group #消费者组名称
          client-id: kafka.consumer.client.id #消费者客户端ID
          fetch-max-wait: 400 #最大等待时间
          fetch-min-size: 1 #最小消费字节数
          heartbeat-interval: 3000 #分组管理时心跳到消费者协调器之间的预计时间
          isolation-level: read_committed
        topic-name: kafka-topic
  4. 接收消息

    java 复制代码
    @KafkaListener(topics = "first")
    public void onMessage(ConsumerRecords<?, ?> records) {
        System.out.println("消费数量=" + records.count());
        for (ConsumerRecord<?, ?> record : records) {
            //消费的哪个topic、partition(哪个分区)的消息,打印出消息内容
            System.out.println("消费:" + record.topic() + "-" + record.partition() + "-" + record.key() + "-" + record.value());
        }
    }
  5. 发送消息

    java 复制代码
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
    
    @Test
    public void cotextLoads() {
        kafkaTemplate.send("first", "key", "data");
    }

生产者消费者配置全量配置:

yaml 复制代码
spring:
  kafka:
    # 指定kafka 代理地址,多个地址用英文逗号隔开
    bootstrap-servers: localhost:9092
    #初始化生产者配置
    producer:
      #消息重发次数,如果配置了事务,则不能为0,改为1
      retries: 0
      # 每次批量发送消息的数量
      batch-size: 16384
      #生产者最大可发送的消息大小,内有多个batch,一旦满了,只有发送到kafka后才能空出位置,否则阻塞接收新消息
      buffer-memory: 33554432
      # 指定消息key和消息体的编解码方式
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      #确认等级ack,kafka生产端最重要的选项,如果配置了事务,那必须是-1或者all
      #acks=0,生产者在成功写入消息之前不会等待任何来自服务器的响应
      #acks=1,只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应
      #acks=-1,表示分区leader必须等待消息被成功写入到所有的ISR副本(同步副本)中才认为product请求成功。这种方案提供最高的消息持久性保证,但是理论上吞吐率也是最差的
      acks: all
      #配置事务,名字随便起
      #transaction-id-prefix: hbz-transaction-

    #初始化消费者配置
    consumer:
      # 指定默认消费者group id,消费者监听到的也是这个
      group-id: test-consumer-group
      #消费者在读取一个没有offset的分区或者offset无效时的策略,默认earliest是从头读,latest不是从头读
      auto-offset-reset: earliest
      #是否自动提交偏移量offset,默认为true,一般是false,如果为false,则auto-commit-interval属性就会无效
      enable-auto-commit: true
      #自动提交间隔时间,接收到消息后多久会提交offset,前提需要开启自动提交,也就是enable-auto-commit设置为true,默认单位是毫秒(ms),如果写10s,最后加载的显示值为10000ms,需要符合特定时间格式:1000ms,1S,1M,1H,1D(毫秒,秒,分,小时,天)
      auto-commit-interval: 1000
      # 指定消息key和消息体的编解码方式
      key-serializer: org.apache.kafka.common.serialization.StringDeserializer
      value-serializer: org.apache.kafka.common.serialization.StringDeserializer
      #批量消费每次最多消费多少条信息
      max-poll-records: 50

    #监听器设置
    listener:
      #消费端监听的topic不存在时,项目启动会报错(关掉)
      missing-topics-fatal: false
      #设置消费类型 批量消费batch,单条消费single
      type: batch
      #指定容器的线程数,提高并发量,默认为1
      #concurrency: 3
      #手动提交偏移量,当enable-auto-commit为true自动提交时,不需要设置改属性
      #ack-mode: manual
相关推荐
极客先躯3 小时前
Hadoop krb5.conf 配置详解
大数据·hadoop·分布式·kerberos·krb5.conf·认证系统
CopyLower4 小时前
Kafka 消费者状态及高水位(High Watermark)详解
分布式·kafka
2301_786964365 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
信徒_6 小时前
kafka
分布式·kafka
Uranus^7 小时前
rabbitMQ 简单使用
分布式·rabbitmq
攒了一袋星辰7 小时前
今日指数项目项目集成RabbitMQ与CaffienCatch
java·分布式·rabbitmq
DieSnowK7 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
这孩子叫逆11 小时前
rabbitmq消费者应答模式
分布式·rabbitmq
灰色孤星A11 小时前
Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区
zookeeper·kafka·kafka分区机制·kafka副本机制·kafka自定义分区
信徒_13 小时前
Rabbitmq
分布式·rabbitmq