springboot配置手动提交_Kafka在SpringBoot中的整合配置详解

一、Springboot与Spring-kafka版本关系

二、概念知识

三、SpringBoot 操作 Kafka 示例

Topic 配置

producer 配置

过滤监听器中的消息

监听器的异常处理

Kafka Consumer 手动/自动提交 Offset

幂等性

四、ISR到底指的是什么东西

五、思考

一、版本关系:

官网上在首页就贴出了SpringKafka和kafka-client版本(它的版本号要和kafka服务器的版本保持一致)的对应关系https://spring.io/projects/spring-kafka#overview

92487ba9052f?utm_campaign=haruki

image.png

二、概念知识

什么是消息中间件

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

什么是 Kafka

Apache Kafka 是一个分布式高吞吐量的流消息系统,Kafka 建立在 ZooKeeper 同步服务之上。它与 Apache Storm 和 Spark 完美集成,用于实时流数据分析,与其他消息传递系统相比,Kafka具有更好的吞吐量,内置分区,数据副本和高度容错功能,因此非常适合大型消息处理应用场景。

Kafka 特性

高并发: 支持数千个客户端同时读写。

可扩展性: kafka集群支持热扩展。

容错性: 允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)。

持久性、可靠性: 消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。

高吞吐量、低延迟: Kafka每秒可以处理几十万消息,延迟最低只有几毫秒,每个消息主题topic可以分多个区,消费者组(consumer group)对消息分区(partition)进行消费。

使用场景

日志收集: 可以用 kafka 收集各种服务的日志,通过kafka以统一接口服务的方式开放给各种消费者,如 hadoop,Hbase,Solr 等。

消息系统: 解耦生产者和消费者、缓存消息等。

用户活动跟踪: Kafka 经常被用来记录web用户或者app用户的各种活动,如浏览网页,搜索,点击等活动,这些活动信息被各个服务器发布到 kafka 的 topic 中,然后订阅者通过订阅这些 topic 来做实时的监控分析,或者装载到 hadoop、数据仓库中做离线分析和挖掘。

运营指标: Kafka也经常用来记录运营监控数据,包括收集各种分布式应用的数据,比如报警和报告等。

流式处理: 比如 spark streaming 和 storm。

基本概念

Broker: 消息中间件处理节点,一个 Kafka 节点就是一个 Broker,一个或者多个 Broker 可以组成一个 Kafka 集群。

Topic: Kafka 的消息通过 Topic 主题来分类,Topic类似于关系型数据库中的表,每个 Topic 包含一个或多(Partition)分区。

Partition: 多个分区会分布在Kafka集群的不同服务节点上,消息以追加的方式写入一个或多个分区中。

LogSegment: 每个分区又被划分为多个日志分段 LogSegment 组成,日志段是 Kafka 日志对象分片的最小单位。LogSegment 算是一个逻辑概念,对应一个具体的日志文件(”.log” 的数据文件)和两个索引文件(”.index” 和 “.timeindex”,分别表示偏移量索引文件和消息时间戳索引文件)组成。

Offset: 每个分区中都由一系列有序的、不可变的消息组成,这些消息被顺序地追加到 Partition 中,每个消息都有一个连续的序列号称之为 Offset 偏移量,用于在 Partition 内唯一标识消息。

Message: 消息是 Kafka 中存储的最小最基本的单位,即为一个 commit log,由一个固定长度的消息头和一个可变长度的消息体组成。

Producer: 消息的生产者,负责发布消息到 Kafka Broker,生产者在默认情况下把消息均衡地分布到主题的所有分区上,用户也可以自定义分区器来实现消息的分区路由。

Consumer: 消息的消费者,从 Kafka Broker 读取消息的客户端,消费者把每个分区最后读取的消息的 Offset 偏移量保存在 Zookeeper 或 Kafka 上,如果消费者关闭或重启,它的读取状态不会丢失。

Consumer Group: 每个 Consumer 属于一个特定的 Consumer Group(若不指定 Group Name则属于默认的 group),一个或多个 Consumer 组成的群组可以共同消费一个 Topic 中的消息,但每个分区只能被群组中的一个消费者操作。

三:SpringBoot 操作 Kafka 示例

SpringBoot 版本:2.1.7.RELEASE

Spring For Apache Kafka 版本:2.2.11.RELEASE

1、Topic 配置

@Configuration

public class KafkaTopicConfig {

/**

* 定义一个KafkaAdmin的bean,可以自动检测集群中是否存在topic,不存在则创建

*/

@Bean

public KafkaAdmin kafkaAdmin() {

Map configs = new HashMap<>();

// 指定多个kafka集群多个地址,例如:192.168.2.11,9092,192.168.2.12:9092,192.168.2.13:9092

configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaConstants.bootstrapServers);

return new KafkaAdmin(configs);

}

/**

* 创建 Topic

*/

@Bean

public NewTopic topicinfo() {

// 创建topic,需要指定创建的topic的"名称"、"分区数"、"副本数量(副本数数目设置要小于Broker数量)"

return new NewTopic("test", 3, (short) 0);

}

}

2、producer 配置

(1). 创建producer配置类

创建procduce配置类,对kafka生产者进行配置,在进行配置中需要设置三个bean分别为

kafkaTemplate:kafka template 实例,用于 Spring 中的其它对象引入该 Bean,通过其向 Kafka 发送消息。

producerFactory:producer 工厂,用于对 kafka producer 进行配置。

producerConfigs:对 kafka producer 参数进行配置。

/**

* 设置@Configuration、@EnableKafka两个注解,声明Config并且打开KafkaTemplate能力。

*/

@Configuration

@EnableKafka

public class KafkaProducerConfig {

/**

* Producer Template 配置

*/

@Bean(name="kafkaTemplate")

public KafkaTemplate kafkaTemplate() {

return new KafkaTemplate<>(producerFactory());

}

/**

* Produc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值