一、 可靠性保证
Kafka到底在什么情况下才能保证消息不丢失呢?
一句话概括,Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。
Kafka 的可靠性保证:
- Kafka 可以保证分区消息的顺序。
- 只有当消息被写入分区的若干同步副本时,才被认为是已提交的。为什么是若干个 Broker 呢?这取决于你对“已提交”的定义。你可以选择只要 Leader 成功保存该消息就算是已提交,也可以是令所有 Broker 都成功保存该消息才算是已提交。
- 只要还有一个副本是存活的,那么已提交的消息就不会丢失。
- 消费者只能读取已提交的消息。
二、复制
kafka 的复制机制和分区的多副本架构是 kafka 可靠性保证的核心。
Kafka 的主题被分为多个分区,分区时基本的数据块。每个分区可以有多个副本,其中一个是首领。所有事件都直接发送给主副本,或者直接从主副本读取事件。其他副本只需要与首领保持同步,并即时复制最新的事件。当主副本不可用时,其中一个同步副本将成为新的主副本。
三、Broker 的可靠性
broker 有 3 个配置参数会影响 Kafka 消息存储的可靠性。
复制系数
replication.factor的作用是设置每个分区的副本数。replication.factor是主题级别配置;
default.replication.factor是 broker 级别配置。
副本数越多,数据可靠性越高;但由于副本数增多,也会增加同