SringBoot整合Kafka
SringBoot整合Kafka示例
一、概述
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:
- 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
- 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
- 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
- 同时支持离线数据处理和实时数据处理。
- Scale out:支持在线水平扩展
简介:Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于 大数据实时处理领域。
二、使用
1、pom依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
2、配置
#指定kafka server的地址,集群配多个,中间,逗号隔开 kafka spring.kafka.bootstrap-servers=192.168.xx.xxx:9092 spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer= org.apache.kafka.common.serialization.StringSerializer spring.kafka.consumer.group-id= test spring.kafka.consumer.enable-auto-commit= true spring.kafka.consumer.auto-commit-interval=20000 spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer
3、使用
创建主题、生成消息
@RestController public class Producer{ @Resource private KafkaTemplate <String, Object> kafkaTemplate; /** * 生成消息 */ @RequestMapping("sendMessage") public String send(String msg,String topic) { kafkaTemplate.send(topic, msg); return "success"; } /** * 创建主题 */ @RequestMapping("createTopic") public String createTopic() { Properties prop = new Properties(); prop.put("bootstrap.servers", " 192.168.xx.xxx:9092"); AdminClient admin = AdminClient.create(prop); ArrayList <NewTopic> topics = new ArrayList <>(); // 参数:主题名称、分区数、副本数 NewTopic newTopic = new NewTopic("top", 1, (short) 1); topics.add(newTopic); CreateTopicsResult result = admin.createTopics(topics); try { result.all().get(); } catch(Exception e) { return "创建失败"; } return "success"; } }
消费消息
@Component public class Consumer{ /** * 对应主题实现对应的事情:如短信发送、消息推送、处理逻辑 */ @KafkaListener(topics = {"top1","top2"}) public void listenAll(ConsumerRecord<?, ?> record) { System.err.println("主题:" + record.topic() + " 消息:" + record.value()); } }
四、扩展(待补充)
常用Message Queue
RabbitMQ 、Redis 、ZeroMQ、ActiveMQ、Kafka/Jafka
- RabbitMQ :http://rabbitmq.mr-ping.com/
浙公网安备 33010602011771号