一、引入Jar
< dependency > < groupId >org.springframework.kafka</ groupId > < artifactId >spring-kafka</ artifactId > < version >2.2.0.RELEASE</ version > </ dependency > |
二、application.yml添加kafka相关配置
##kafka相关配置 spring: kafka: bootstrap-servers: 10.59.74.137:9092,10.59.74.138:9092,10.59.74.139:9092 consumer: key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-deserializer: org.apache.kafka.common.serialization.StringDeserializer group-id: fm max-poll-records: 1 auto-commit-interval-ms: 10000 enable-auto-commit: true producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer |
high-level consumer的配置参数:
参数 | 默认值 | 描述 |
---|
bootstrap-servers | | 集群(多个IP:Port 中间用逗号隔开) |
auto-commit-interval-ms | 10000 | 往zookeeper上写offset的频率 |
max-poll-records | 500 | 一次拉取消息的最大数,我们这里一次拉取一条是为了保证消息的优先级 |
group-id | groupid | 一个字符串用来指示一组consumer所在的组 |
三、 生产消息
@RestController @RequestMapping ( "test" ) public class TestKafkaProducerController { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @RequestMapping ( "send" ) public String send(String msg){ kafkaTemplate.send( "topic_name" , msg); return "success" ; } } |
当然 org.springframework.kafka.core.KafkaTemplate 里面的生产消息的方法很多,根据自己的需求调用,不仅可以设置分片分区(partition),也可以设置生产时间戳。
![](http://pms.ipo.com/download/attachments/113099145/image2019-2-27_10-59-57.png?version=1&modificationDate=1551236398000&api=v2)
四、消费消息
@Component public class TestConsumer { @KafkaListener (topics = "topic_name" ) public void listen (ConsumerRecord<?, ?> record) throws Exception { System.out.printf( "topic = %s, offset = %d, value = %s \n" , record.topic(), record.offset(), record.value()); } } |
![](http://pms.ipo.com/download/attachments/113099145/image2019-2-27_10-51-53.png?version=1&modificationDate=1551235913000&api=v2)