创建springboot工程
https://www.malaoshi.top/show_1EF5qXjMmlZR.html
添加依赖
spring框架有对kafka的支持,添加该依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.4.12.RELEASE</version>
</dependency>
选择 2.4.12.RELEASE版本的原因:
kafka教程-Spring for Apache Kafka版本的选择
application.properties
注意修改2处:
- 指定springboot端口号
- 指定kafka的ip、port
- 自动提交offset
- 指定默认消费者组
server.port=8083
###########【Kafka集群】###########
spring.kafka.bootstrap-servers=hadoop1:9092,hadoop2:9092,hadoop3:9092
###########【初始化消费者配置】###########
# 默认的消费组ID
spring.kafka.consumer.properties.group.id=user-group
# 是否自动提交offset
spring.kafka.consumer.enable-auto-commit=true
# 提交offset延时(接收到消息后多久提交offset)
spring.kafka.consumer.auto.commit.interval.ms=1000
# 当kafka中没有初始offset或offset超出范围时将自动重置offset
# earliest:重置为分区中最小的offset;
# latest:重置为分区中最新的offset(消费分区中新产生的数据);
# none:只要有一个分区不存在已提交的offset,就抛出异常;
spring.kafka.consumer.auto-offset-reset=earliest
# 消费会话超时时间(超过这个时间consumer没有发送心跳,就会触发rebalance操作)
spring.kafka.consumer.properties.session.timeout.ms=120000
# 消费请求超时时间
spring.kafka.consumer.properties.request.timeout.ms=180000
# Kafka提供的序列化和反序列化类
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
# 消费端监听的topic不存在时,项目启动会报错(关掉)
spring.kafka.listener.missing-topics-fatal=false
# 设置批量消费
# spring.kafka.listener.type=batch
# 批量消费每次最多消费多少条消息
# spring.kafka.consumer.max-poll-records=50
创建消费者类
当有消息时,会自动执行 onMessage() 方法
@Component
public class Consumer {
// 消费监听
@KafkaListener(topics = {"userlog"})
public void onMessage(ConsumerRecord<?, ?> record) {
// 消费的哪个topic、partition的消息,打印出消息内容
System.out.println("简单消费:" + record.topic() + "-" + record.partition() + "-" + record.value());
}
}
测试
启动 zookeeper 服务
windows下双击zkServer.cmd运行启动消费者springboot工程
启动生产者springboot工程
访问 http://localhost:8081/kafka/test-msg ,通过Controller向kafka发送消息
在消费者springboot工程的控制台中,可以收到消息