参数
ProducerConfig 生产者参数配置
- bootstrap.servers 主机:端口 列表,用来建立与kafka的初始化连接
- retries 启用重试失败的发送次数
- acks
- 0 生产者不会等待服务其确认
- 1 不等待副本确认,leader直接最初回应
- all/-1 leader等待所有副本确认后做出回应
- batch.size 当多个记录被发送到同一分区时,生产者将这些记录进行批处理为更少的请求,默认值 16384字节
- key.serializer key的序列化类
- value.serializer value的序列化类
ConsumerConfig 消费者参数配置
- bootstrap.servers
- group.id 消费者所属的消费者组的唯一标识
- enable.auto.commit 自动提交offset(记录消息在分区的位置) 默认true
- auto.commit.interval.ms 自动提交时间间隔 默认值是 5000ms
- 设置自动提交后会间隔指定的时间,或者再次从topic取数据时,将会提交最后一次的offset
- 我们可以不设置自动提交,可以手动提交
- auto.offset.reset
当Kafka中没有初始偏移量或者服务器上不再存在当前偏移量时采取的策略- earliest 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
- latest 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
- none topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
- max.poll.records 一次调用poll() 操作时返回的最大记录数
- key.serializer key的序列化类
- value.serializer value的序列化类
生产者
KafkaTemplate<?,?> 生产者 kafkaTemplate
kafkaTemplate.send() 返回ListenableFuture,可以 addCallBack
消费者
@KafkaListener
- 注解,添加到方法上面,收到指定topic的方法时会执行方法
- 参数
- topics 监听的topic
- containerFactory 配置类
- 描述的方法的参数 ConsumerRecord<String, String> record
KafkaListenerContainerFactory
- 消费者配置类
- ConcurrentKafkaListenerContainerFactory<>();
- .setConsumerFactory(consumerFactory()); 常规参数
- .setConcurrency(x); 消费者并发监听线程数
- 所有机器的总x > topic 分区数 线程冗余
- 所有机器的总x = topic 分区数 刚好
- 所有机器的总x < topic 分区数 一个线程监听多个分区
对于一个组,一个分区只会分配给组下的一个消费者线程
- .setBatchListener(true); 批量获取record,配合max.poll.record配置
- .getContainerProperties().setPollTimeout(3000);