kafka学习目录:kafka目录
文章目录
Kafka中怎么保证消息不会丢失和不重复消费?
从两个方面分析:消费推送和消息消费。也就是生产者和消费者两方面。
首先我们需要知道topic的概念。
- Topic : 话题,可以理解为一个队列, 生产者和消费者面向的都是一个 topic。
- 一个topic又有多个partition,而每个分区都有若干个副本:一个 leader 和若干个 follower。
生产者在推送消息时,会确定topic和topic中的那个partition。
一个消费者组内每个消费者负责消费 一个topic中不同分区的数据,同一个分区同时只能由一个组内消费者消费
一、生产者推送消息时怎么保证消息不丢失和不重复
对于生产者,在推送消息的时候,有以下几种方式来确定topic、topic中的partition。
将 producer 发送的数据封装成一个 ProducerRecord
对象。
- 指明 partition 的情况下,直接将指明的值直接作为 partiton 值;
- 没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
- 既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 parti