Amazon Kinesis Data Streams - Terminology and Concepts#

Keywords: AWS, Amazon, Kinesis, Data Stream, Concept.

Concepts#

  • Kinesis Data Stream: 相当于一个 Kafka 的 Topic, 你写入数据的时候都是写入到这个 Data Stream 里面的.

  • Shard: 相当于一个 Kafka 的 Partition

  • Data Record: 相当于一个 Kafka 的 Message, 一条被 binary encode 之后的数据.

  • Capacity Mode: 有两种模式, 一种是 on-demand, AWS 自动扩容, 一种是 provisioned, 你自己指定 Shard 的数量并自己 scale.

  • Retention Period: 数据在 shard 上保留多久.

  • Producer: 数据生产者. Producer 写入数据的时候不指定 Shard, Data Stream 自己根据 Partition key 决定写入到哪个 Shard. 通常 Producer 有以下两种方式来写入数据
    • PutRecords API: Synchronous, immediately available after captured, need manually implement retry, batch.

    • Kinesis Producer Library (Java): Asynchronous, High Performance (high concurrence), but with larger delay

  • Consumer: 数据消费者. 读取的时候需要指定 Shard 以及 ShardIterator (Kafka 中的 Offset 对等的概念)

  • Amazon Kinesis Data Streams Application: 一般是一个消费者集群.

  • Partition Key: 每个 data record 都必须有 partition key, 你可以手动指定, 也可以指定算法由某个 key 计算而来. 这个 partition key 会被 hash 之后用 consistent hash 算法来决定写入到哪个 Shard.

  • Sequence Number: 每个 record 在 shard 内都有一个唯一的 sequence number 用于决定 record 的顺序.

  • KPL (Kinesis Producer Library): AWS 官方提供的 Java SDK, 用于高性能异步写入. 也提供了 Python 的 binding (Python 库里面没有业务逻辑, 只是调用 Java 接口). 简单来说, 它额外提供了这些功能:
    • Async PutRecords: 异步, 提高性能.

    • Collection: 将多个 Record 打入 Buffer 后再用 Batch PutRecords 发送, 减少 PutRecord API 调用次数, 从而提高性能.

    • Aggregation / Batch: 将多个 Record 进行 Aggregation, 合并成一个 Record, 然后一起发送. 避免每个 Record 太小, 无法充分利用带宽..

  • KCL (Kinesis Consumer Library): AWS 官方提供的 Java SDK, 用于稳定可靠的消费数据, 并提供重试, 容错, 记录消费状态等高级功能. 同样也提供 Python 的 binding.

  • Server-Side Encryption: 默认情况下所有写入 Kinesis 的数据都是加密的.

Reference:

FAQ#

本节是 Kinesis 官方 FAQ 中比较重要的部分的节选和解读.

  • Q: Does on-demand mode scale both up and down?

  • A: YES

  • Q: Can I switch between on-demand and provisioned mode?

  • A: YES:

  • Q: Is the order of what consumer received is same as the order produced?

  • A: Yes, It provides ordering of records, as well as the ability to read and/or replay records in the same order to multiple Amazon Kinesis Applications

Reference: https://aws.amazon.com/kinesis/data-streams/faqs/