概念:
consumer 消费者
producer 生产者
broker 节点
offset 消费进度 独立于每个消费组
groupId 消费组 同一groupId下,消息只能被消费一次
yml配置:
spring:
kafka:
bootstrap-servers: 192.168.214.128:9092
# bootstrap-servers: 112.94.4.34:9092
#=============== provider =======================
producer:
retries: 0
# 每次批量发送消息的数量
batch-size: 16384
buffer-memory: 33554432
# 指定消息key和消息体的编解码方式
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.ByteArraySerializer
#=============== consumer =======================
consumer:
#如果存在已经提交的offest时,不管设置为earliest 或者latest 都会从已经提交的offest处开始消费
#如果不存在已经提交的offest时,earliest 表示从头开始消费,latest 表示从最新的数据消费,也就是新产生的数据.
#默认latest
auto-offset-reset: earliest
enable-auto-commit: true
auto-commit-interval: 100
# 指定消息key和消息体的编解码方式
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.ByteArrayDeserializer
消息监听类
@Component
@Slf4j
public class MessageListener {
@KafkaListener(topics ="mykafka",groupId = "test")
public void MessageListener(ConsumerRecord<?, ?> message){
Optional<?> tcpMessageModelOptional= BKafkaConsumer.messageDeserializer(message);
if(tcpMessageModelOptional.isPresent()){
String messageModel=(String)tcpMessageModelOptional.get();
log.info("0消费到消息:{}",messageModel);
}
}
@KafkaListener(topics ="mykafka",groupId = "test1")
public void MessageListener1(ConsumerRecord<?, ?> message){
Optional<?> tcpMessageModelOptional= BKafkaConsumer.messageDeserializer(message);
if(tcpMessageModelOptional.isPresent()){
String messageModel=(String)tcpMessageModelOptional.get();
log.info("1消费到消息:{}",messageModel);
}
}
@KafkaListener(topics ="mykafka")
public void MessageListener3(ConsumerRecord<?, ?> message){
Optional<?> tcpMessageModelOptional= BKafkaConsumer.messageDeserializer(message);
if(tcpMessageModelOptional.isPresent()){
String messageModel=(String)tcpMessageModelOptional.get();
log.info("3消费到消息:{}",messageModel);
}
}
}
@KafkaListener不指定groupId的话 需要在配置文件中指定默认groupId
spring.kafka.consumer.group-id: test-group