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)

浙公网安备 33010602011771号