银行系统中的消息分发利器Kafka(三)

建议从头阅读:
银行系统中的消息分发利器Kafka(一)
银行系统中的消息分发利器Kafka(二)

6、Partition
上次我们说到,Kafka可以存储数据,而且数据按照Topic进行分类。
这些存储的数据可能会很大,这可能会给Kafka的Broker带来很大的存储压力。
一个好的解决办法就是把这些数据拆成一个或多个Partition:



然后,把这多个Partition分发到不同的服务器上。
Kafka是一个分布式系统,所以对数据文件的Partition进行分布式管理是很方便的。
随之,另外一个问题来了,我们要把数据分成多少个Partition呢?



这个问题不是Kafka来解答的,而是Kafka的管理员,他们会确定一项数据分成多少个Partition,然后Kafka再按照他们的指令来处理分区。
每一个Partition就存在一个服务器上,也不能再将他们进一步拆分。所以管理员可以根据服务器情况计算出Partition的数量。
7、Offset
我们知道Kafka上会接受大量的消息(Message),然后这样一个一个消息在Kafka中会形成一个顺序的队列。
而Offset是就是“消息”在队列中的位置。

在每一个Partition 中,第一个消息的Offset就是0,第二个就是1,以此类推。另外,Offset并不是一个全局的ID,它只作用于所属的Partition。所以,在同一个Partition中,不会有相同的Offset。
结合上面的知识,我们可以知道,如果要在Kafka中定位一个消息信息,就是先找到Topic,然后找到Partition,最后找到Offset。


8、Consumer Group
先把前面的场景复习一下。
首先我们有很多节点的数据要收集,于是我们通过Kafka来实现:



然后我们为每一个节点创建一个Producer:



现在我们为Kafka创建Consumer,Consumer将从Kafka上获取数据,并将数据存入DataCenter:

这时,你有成百上千的Producer同时将数据放入同一个Topic,Kafka怎么能hold住呢?我们前面说过Kafka是一个分布式系统,于是我们利用很多的Kafka Broker来分散处理压力,并且将数据分Partition:

这时你会发现,处理压力跑到Conumser那里了,于是我们就需要一个Consumer Group了。



Consumer Group中的Consumer要与Partition一一对应。因此,一个Topic有多少Partition,一个Consumer Group就有多少Consumer。Kafka不允许两个或两个以上的Consumer同时读取一个Partition的数据,以避免double reading的问题。

Kafka的几个重要的概念就介绍完了。后面我会逐步深入的介绍Kafka的一些细节,欢迎关注~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O...
    高广超阅读 14,394评论 8 167
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 10,803评论 0 34
  • 目标 高吞吐量来支持高容量的事件流处理 支持从离线系统加载数据 低延迟的消息系统 持久化 依赖文件系统,持久化到本...
    jiangmo阅读 5,139评论 0 4
  • 大致可以通过上述情况进行排除 1.kafka服务器问题 查看日志是否有报错,网络访问问题等。 2. kafka p...
    生活的探路者阅读 12,221评论 0 10
  • 今天,广州在打台风,天气变得很凉爽,前几天真是热晕头了。你现在生活的地方热吗?可以留言告诉杏仁哦。 2017.8....
    杏仁BOOK阅读 1,638评论 0 0