我爱编程

kafka 简介

2018-05-21  本文已影响0人  博弈史密斯

什么是Kafka?

KafKa是一款由 Apache 软件基金会开源,使用 Scala 编写的一个 高吞吐 分布式
发布 - 订阅 消息系统 和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。

Kafka适合 离线 和 在线 消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失Kafka构建在ZooKeeper同步服务之上。 它与Apache Spark Streaming 非常好地集成,用于实时流式数据分析。

概念介绍

消息传输流程

上图展示了两个 producer 发送了分类为 topic1 的消息,另外一个 producer 发送了 topic2 的消息。
从上图中就可以看出同一个 Topic 下的消费者和生产者的数量并不是对应的。

kafka 服务器消息存储策略

谈到kafka的存储,就不得不提到分区,即partitions,创建一个topic时,同时可以指定分区数目,分区数越多,其吞吐量也越大,但是需要的资源也越多,同时也会导致更高的不可用性,kafka在接收到生产者发送的消息之后,会根据均衡策略将消息存储到不同的分区中。

在每个分区中,消息以顺序存储,最晚接收的的消息会最后被消费。

生产者在向kafka集群发送消息的时候,可以通过指定分区来发送到指定的分区中。
也可以通过指定均衡策略来将消息发送到不同的分区中。
如果不指定,就会采用默认的随机均衡策略,将消息随机的存储到不同的分区中。

与 consumer 的交互


在消费者消费消息时,kafka使用 offset 来记录当前消费的位置。

在kafka的设计中,可以有多个不同的group来同时消费同一个topic下的消息,如图,我们有两个不同的group同时消费,他们的的消费的记录位置offset各不项目,不互相干扰。

对于一个group而言,消费者的数量不应该多余分区的数量,因为在一个group中,每个分区至多只能绑定到一个消费者上,即一个消费者可以消费多个分区,一个分区只能给一个消费者消费

因此,若一个group中的消费者数量大于分区数量的话,多余的消费者将不会收到任何消息。

上一篇下一篇

猜你喜欢

热点阅读