
88
|
第
6
章
ACID
指的是
原子性
、
一致性
、
隔离性
和
持久性
。如果一个供应商说他们的数据库遵循
ACID
规范,其实就是在说他们的数据库支持与事务相关的行为。
有了这些保证,我们才能相信关系型数据库的事务特性可以确保应用程序的安全。我们知
道系统承诺可以做到些什么,也知道在不同条件下它们会发生怎样的行为。我们了解这些
保证机制,并基于这些保证机制开发安全的应用程序。
所以,了解系统的保证机制对于构建可靠的应用程序来说至关重要,这也是能够在不同条
件下解释系统行为的前提。那么
Kafka
可以在哪些方面作出保证呢?
• Kafka
可以保证分区消息的顺序。如果使用同一个生产者往同一个分区写入消息,而且
消息
B
在消息
A
之后写入,那么
Kafka
可以保证消息
B
的偏移量比消息
A
的偏移量大,
而且消费者会先读取消息
A
再读取消息
B
。
•
只有当消息被写入分区的所有同步副本时(但不一定要写入磁盘),它才被认为是“已
提交”的。生产者可以选择接收不同类型的确认,比如在消息被完全提交时的确认,或
者在消息被写入首领副本时的确认,或者在消息被发送到网络时的确认。
•
只要还有一个副本是活跃的,那么已经提交的消息就不会丢失。
•
消费者只能读取已经提交的消息。
这些基本的保证机制可以用来构建可靠的系统,但仅仅依赖它们是无法保证系统完全可靠
的。构建一个可靠的系统需要作出一些权衡,
Kafka
管理员和开发者可以在配置参数上作
出权衡,从而得到他们想要达到的可靠性。这种权衡一般是指消息存储的可靠性和一致性
的重要程度与可用性、高吞吐量、低延迟和硬件成本的重要程度之间的权衡 ...