最近项目需求用到了kafka信息中间件,在此做一次简单的记录,方便以后其它项目用到。

引入依赖

  1. <dependency>
  2. <groupId>org.springframework.kafka</groupId>
  3. <artifactId>spring-kafka</artifactId>
  4. </dependency>

配置文件

  1. kafka.consumer.servers=127.0.0.1:9092
  2. kafka.consumer.enable.auto.commit=true
  3. kafka.consumer.session.timeout=6000
  4. kafka.consumer.auto.commit.interval=100
  5. kafka.consumer.auto.offset.reset=latest
  6. kafka.consumer.group.id=kafka-test-group
  7. kafka.consumer.concurrency=10
  8. kafka.producer.servers=127.0.0.1:9092
  9. kafka.producer.retries=1
  10. kafka.producer.batch.size=4096
  11. kafka.producer.linger=1
  12. kafka.producer.buffer.memory=40960

生产者配置类

  1. @Configuration
  2. @EnableKafka
  3. public class KafkaProducerConfig {
  4. @Value("${kafka.producer.servers}")
  5. private String servers;
  6. @Value("${kafka.producer.retries}")
  7. private int retries;
  8. @Value("${kafka.producer.batch.size}")
  9. private int batchSize;
  10. @Value("${kafka.producer.linger}")
  11. private int linger;
  12. @Value("${kafka.producer.buffer.memory}")
  13. private int bufferMemory;
  14. @Bean
  15. public KafkaTemplate<String, String> kafkaTemplate() {
  16. return new KafkaTemplate(producerFactory());
  17. }
  18. public ProducerFactory<String, String> producerFactory() {
  19. return new DefaultKafkaProducerFactory<>(producerConfigs());
  20. }
  21. public Map<String, Object> producerConfigs() {
  22. Map<String, Object> props = new HashMap<>();
  23. props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, servers);
  24. props.put(ProducerConfig.RETRIES_CONFIG, retries);
  25. props.put(ProducerConfig.BATCH_SIZE_CONFIG, batchSize);
  26. props.put(ProducerConfig.LINGER_MS_CONFIG, linger);
  27. props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, bufferMemory);
  28. props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
  29. props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
  30. return props;
  31. }
  32. }

消费者配置类

  1. @Configuration
  2. @EnableKafka
  3. public class KafkaConsumerConfig {
  4. @Value("${kafka.consumer.servers}")
  5. private String servers;
  6. @Value("${kafka.consumer.enable.auto.commit}")
  7. private boolean enableAutoCommit;
  8. @Value("${kafka.consumer.session.timeout}")
  9. private String sessionTimeout;
  10. @Value("${kafka.consumer.auto.commit.interval}")
  11. private String autoCommitInterval;
  12. @Value("${kafka.consumer.group.id}")
  13. private String groupId;
  14. @Value("${kafka.consumer.auto.offset.reset}")
  15. private String autoOffsetReset;
  16. @Value("${kafka.consumer.concurrency}")
  17. private int concurrency;
  18. @Bean
  19. public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
  20. ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
  21. factory.setConsumerFactory(consumerFactory());
  22. factory.setConcurrency(concurrency);
  23. factory.getContainerProperties().setPollTimeout(1500);
  24. return factory;
  25. }
  26. public ConsumerFactory<String, String> consumerFactory() {
  27. return new DefaultKafkaConsumerFactory<>(consumerConfigs());
  28. }
  29. public Map<String, Object> consumerConfigs() {
  30. Map<String, Object> propsMap = new HashMap<>(8);
  31. propsMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, servers);
  32. propsMap.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, enableAutoCommit);
  33. propsMap.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, autoCommitInterval);
  34. propsMap.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, sessionTimeout);
  35. propsMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
  36. propsMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
  37. propsMap.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
  38. propsMap.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, autoOffsetReset);
  39. return propsMap;
  40. }
  41. }

生产者类

  1. @Component
  2. public class KafkaProducer {
  3. private Logger logger = LoggerFactory.getLogger(getClass());
  4. @Autowired
  5. private KafkaTemplate kafkaTemplate;
  6. public void sendMessage(String topic, String message) {
  7. logger.info("on message:{}", message);
  8. kafkaTemplate.send(topic, message);
  9. }
  10. }

消费者类

  1. @Component
  2. public class VideoCosConsumer {
  3. protected final Logger logger = LoggerFactory.getLogger(this.getClass());
  4. @KafkaListener(topics = {"test-topic"})
  5. public void consumerMessage(String message) {
  6. logger.info("on message:{}", message);
  7. }
  8. }

  以上就是spring cloud整合kafka的过程,现在spring让我们代码搬运工越来越没有活干了,连复制粘贴都不行了,只能简单的拼装需要的实体类。

spring boot整合kafka的更多相关文章

  1. spring boot 2.x 系列 —— spring boot 整合 kafka

    文章目录 一.kafka的相关概念: 1.主题和分区 2.分区复制 3. 生产者 4. 消费者 5.broker和集群 二.项目说明 1.1 项目结构说明 1.2 主要依赖 二. 整合 kafka 2 ...

  2. kafka学习(五)Spring Boot 整合 Kafka

    文章更新时间:2020/06/08 一.创建Spring boot 工程 创建过程不再描述,创建后的工程结构如下: POM文件中要加入几个依赖: <?xml version="1.0& ...

  3. spring boot 整合kafka 报错 Exception thrown when sending a message with key='null' and payload=JSON to topic proccess_trading_end: TimeoutException: Failed to update metadata after 60000 ms.

    org.springframework.kafka.support.LoggingProducerListener- Exception thrown when sending a message w ...

  4. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  5. activeMQ入门+spring boot整合activeMQ

    最近想要学习MOM(消息中间件:Message Oriented Middleware),就从比较基础的activeMQ学起,rabbitMQ.zeroMQ.rocketMQ.Kafka等后续再去学习 ...

  6. RabbitMQ使用及与spring boot整合

    1.MQ 消息队列(Message Queue,简称MQ)——应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...

  7. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  8. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  9. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

随机推荐

  1. Kotlin的特性

    time streams try-with-resources 函数扩展,给types.classes或者interfaces新增方法 null safe 不需要new,后缀声明类型 自动转换有get ...

  2. MySQL InnoDB Cluster介绍

    目录 一.MySQL InnoDB Cluster介绍 二.环境准备 三.将MGR节点加入MySQL Cluster 四.问题汇总 五.性能测试 六.个人总结 一.MySQL InnoDB Clust ...

  3. Git使用(码云)

    1.安装git软件(码云/GitHub) 2.码云注册,保存代码 3.创建代码托管仓库,仓库名相当于码云上的文件夹 4.写作业并提交 在作业文件夹上,右键选择‘get bash here’ 在黑框里输 ...

  4. 峰回路转:去掉 DbContextPool 后 Windows 上的 .NET Core 版博客表现出色

    今天早上,我们修改了博客程序中的1行代码,将 services.AddDbContextPool 改为 services.AddDbContext ,去掉 DbContextPool . 然后奇迹出现 ...

  5. 后端开发之chrome开发者模式

    1. 场景描述 java开发前后端分离模式越来越流行,后端人员可以直接使用swagger进行接口调试(前后端分离之Swagger2),但是调试的时候,需要设置入参,假如该模块不是软件老王开发的,接别人 ...

  6. Hbase多版本(version)数据写入和读取

    1. 首先创建一个支持多版本的hbase表 create }   2.put几条测试数据 put ','f1:name','jack1' put ','f1:name','jack2' 3.读取多版本 ...

  7. 小白学Python(2)——常用Python编程工具,Python IDE

    下载好Python,但是如何开始编程呢? 有几种方法, 1.第一个就是command lind 即为命令行的方式,也就是我们常说的cmd. 输入 win+ cmd 在命令行中再输入 python,即可 ...

  8. 高并发下,调整IIS相关的设置,以提高服务器并发量

    1.修改 IIS 队列长度 参考资料:https://docs.microsoft.com/zh-cn/previous-versions/office/communications-server/d ...

  9. JAVA 异常汇总

    1  java.lang.ArithmeticException: / by zero 原因:当我们定义的被除数为整型时(short.int.long)会抛出此异常, 被除数为整型时不可为零.解决办法 ...

  10. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...