Apache Kafka 简介

2019-05-26  本文已影响0人  Alex90

Kafka 最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper 协调的分布式消息系统,用 Scala 语言编写。

Kafka 目前主要作为一个分布式的发布订阅式的消息系统使用,具备可扩展、可持久化、可靠性、高吞吐、低延迟的能力,支持高并发场景。

Kafka 中的角色

主要分为三种角色:Producer(消息生产者)、Consumer(消息消费者)、Kafka cluster(Kafka 集群,消息队列)

Kafka 0.9

Kafka 0.10.x 及之后的版本增加了两个角色:Connectors 主要负责 Kafka 与其他系统的集成;Stream processer 提供了轻量级流式数据处理能力(流计算类库)

Kafka 0.10

Kafka 中的概念

Topic & Partition

Topic 在逻辑上可以被认为是一个 queue,每一条消息都必须指定 topic,既把这条消息放进哪个 queue。每个 topic 可以被分成多个 partition,每个 partition 对应一个 append log 文件,负责存储发送到这个 partition 的消息(尾部追加)。

每条消息在文件中的位置称为 offset,作为一条消息的唯一标记(Long 型数字)。

image

partition 存储是顺序写磁盘,效率非常高,这也是 Kafka 高吞吐率的一个很重要的保证。

partition 是为了提高 topic 中消息的并行处理能力,使用合适的规则(根据消息的 key 和 partition 机制),可以使一个 topic 中的消息均匀分布到各个 partition 中。如果只有一个 partition,既只有一份存储文件,那么其所在的服务器的机器IO会成为性能瓶颈,通过增加 partition 可以进行水平扩展。

Consumer & Consumer group

consumer 消费数据根据 offset 依次消费,最后一个消费的消费记录 offset 会保存在 broker 中,再次进行消费时可以从当前消费位置开始继续消费同一个 topic。

对于多个独立的 consumer 消费同一个 topic,不同的 consumer 之间互不影响,都能消费到 topic 下的全部消息。每个 consumer 会各自维护当前 offset。

image

每个 consumer 都属于一个 consumer group,具有相同 group id 的 consumer 属于同一个 consumer group。

同一 topic 的一条消息可以被多个 consumer group 同时消费。但是在一个 consumer group 内,只有一个 consumer 能够消费这条消息。在 Kafka 的实现中,consumer group 中的多个 consumer 会进行负载均衡,并且每个 partition 只能被一个 consumer 消费到,因此同一个 consumer group 中 consumer 的数量不要超过 partition 的数量。

image

同一个消费者/消费者组可以通过重置 offset 多次消费某些数据,或者跳过消费某些数据。

Kafka 的特点

Kafka 适用场景

  1. 消息系统(Messaging)

  2. 网站活性跟踪(Web tracking)

  3. 日志收集(Log Collection)


上一篇下一篇

猜你喜欢

热点阅读