kafka-实践1

大规模使用 Apache Kafka 的20个最佳实践

快速了解Kafka的概念与架构

Kafka是一种高效的分布式消息系统。在性能上,它具有内置的数据冗余度与弹性,也具有高吞吐能力和可扩展性。

在功能是,它支持自动化的数据保存限制,能够以“流”的方式为应用提供数据转换,以及按照“键-值(key-value)”的建模关系“压缩”数据流。

要了解各种最佳实践,您需要首先熟悉如下关键术语:

• Message(消息):Kafka中的一条记录或数据单位。每条消息都有一个键和对应的一个值,有时还会有可选的消息头。

• Producer(生产者):producer将消息发布到Kafka的topics上。producer决定向topic分区的发布方式,如:轮询的随机方法、或基于消息键(key)的分区算法。

• Broker(代理):Kafka以分布式系统或集群的方式运行。那么群集中的每个节点称为一个broker。

• Topic(主题):topic是那些被发布的数据记录或消息的一种类别。消费者通过订阅topic,来读取写给它们的数据。

• Topic partition(主题分区):不同的topic被分为不同的分区,而每一条消息都会被分配一个offset,通常每个分区都会被复制至少一到两次。

每个分区都有一个leader和存放在各个follower上的一到多个副本(即:数据的副本),此法可防止某个broker的失效。

群集中的所有broker都可以作为leader和follower,但是一个broker最多只能有一个topic partition的副本。Leader可被用来进行所有的读写操作。

• Offset(偏移量):单个分区中的每一条消息都被分配一个offset,它是一个单调递增的整型数,可用来作为分区中消息的唯一标识符。

• Consumer(消费者):consumer通过订阅topic partition,来读取Kafka的各种topic消息。然后,消费类应用处理会收到消息,以完成指定的工作。

• Consumer group(消费组):consumer可以按照consumer group进行逻辑划分。topic partition被均衡地分配给组中的所有consumers。

因此,在同一个consumer group中,所有的consumer都以负载均衡的方式运作。

换言之,同一组中的每一个consumer都能看到每一条消息。如果某个consumer处于“离线”状态的话,那么该分区将会被分配给同组中的另一个consumer。

这就是所谓的“再均衡(rebalance)”。当然,如果组中的consumer多于分区数,则某些consumer将会处于闲置的状态。

相反,如果组中的consumer少于分区数,则某些consumer会获得来自一个以上分区的消息。

• Lag(延迟):当consumer的速度跟不上消息的产生速度时,consumer就会因为无法从分区中读取消息,而产生延迟。

延迟表示为分区头后面的offset数量。从延迟状态(到“追赶上来”)恢复正常所需要的时间,取决于consumer每秒能够应对的消息速度。

其公式如下:

time = messages / (consume rate per second - produce rate per second)

 

posted @ 2020-07-10 15:36  弱水三千12138  阅读(186)  评论(0)    收藏  举报