先导入spring boot整合kafka的依赖
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>
然后是application.yml中关于kafka的配置
1 spring: 2 kafka: 3 bootstrap-servers: ip:端口 #kafka服务器地址 多个以,号隔开 4 #生产者配置 5 producer: 6 batch-size: 16384 #每次批量发送信息的数量 7 buffer-memory: 33554432 #达到该缓冲区大小就发送数据 8 key-serializer: org.apache.kafka.common.serialization.StringSerializer #key的序列化器 9 value-serializer: org.apache.kafka.common.serialization.StringSerializer #value的序列化器 10 #消费者配置 11 consumer: 12 group-id: test #消费者分组id,同一个分组的消费者不会读取到同一个消息 13 enable-auto-commit: true #启用自动提交偏移量 14 auto-commit-interval: 100 #设置偏移量提交间隔 15 key-deserializer: org.apache.kafka.common.serialization.StringDeserializer #key的反序列化器 16 value-deserializer: org.apache.kafka.common.serialization.StringDeserializer #value的反序列化器 17 18 #自定义主题名,在代码中可以读取,方便修改主题 19 topic: testTopic
这是基础配置,我生产者和消费者这里都是同一个工程进行测试了,如果是两个不同的工程,只写生产者或消费者的配置就行
1 @Component 2 public class KafkaProducer { 3 4 @Autowired 5 private KafkaTemplate<String,Object> kafkaTemplate; 6 7 @Value("${topic}") 8 private String topic; 9 10 public void sendMessage(String message){ 11 kafkaTemplate.send(topic,message); 12 } 13 14 }
这里新建了一个kafka生产者类用于发送信息到kafka,并且交给了spring 管理,在我们需要使用的地方直接注入进来即可.
这个KafkaTemplate<>类是spring boot提供的模板类,封装了关于kafka的操作.
kafka消费者
1 @Component 2 public class KafkaConsumer { 3 4 @KafkaListener(topics = {"${topic}"}) 5 public void getMessage(String message){ 6 System.out.println(message); 7 } 8 9 }
同样交由spring管理,然后使用@KafkaListener注解,定义要监听的主题,至于{"${topic}"}这个是读取配置文件中的topic配置项,也是我所定义的主题,但监听到有信息时,
就会调用这个方法,将信息作为一个字符串参数传递进来,里面就可以写你的业务逻辑了.
kafka大致使用就是这样,很多细节配置,暂时也不清楚,有机会在补充吧