赞
踩
消息生产者生产消息发送到消息队列(queue),消费者从queue中取出并且消费信息,而这条信息被消费后queue中就没有了这条信息,不存在重复消费
Kafka是Apache基金会的一个开源项目,是一个分布式的、可扩展的、高吞吐的、高可用的分布式数据流平台,既可以运行在单台服务器上,也可以在多台服务器
上形成集群,我们既可以发送数据到集群中的任意一台服务器,也可以从集群中的任意一台服务器中读取数据。Kafka可以保证数据不丢失,并且可以做到高可用,
类似与消息队列。
参考文章:
Kafka基本原理
在Kafka中,可能会存在某个topic有多个patition,这时候我们应该如何去选择partition?这时候我们一般会遵循以下原则:
生产者在往Kafka内写入数据的时候,可以设置参数来确定KafKa是否接收到了数据,这个参数取值可以是0
,1
,all
topic
是统一类别的消息记录(record)的集合.在Kafka中,一个topic
往往会有多个订阅者,对于每一个主题,Kafka集群都会维护一个分区数据日志:
每一个partition
都是一个有序且不可变的消息记录集合。当有新的数据写入的时候,就会被添加到partition的末尾,在每一个partition中,每条消息都
会被翻倍一个顺序的唯一标识,这个标识就是offset
(偏移量)。当消费者消费数据的时候,会记录下自己消费到的offset
,当消费者断开连接的时候,会
记录下断开连接的offset
.
注意:Kafka只保证在同一个partition内部消息是有序的,不同partition之间是无法保证有序的。
Kafka可以配置一个保留期限来标识日志在集群中的有效期,超过这个期限的日志会被删除。
Partition在服务器上的表现形式是一个个的文件夹,在每个Partition的文件夹下面会有多组segement文件,每组segement文件包含存储message的.log
文件,还有用于检索消息的索引文件index
和timeindex
。
多个消费者实例可以组成一个消费者组,并且用标签来区分不同的消费者组,一个消费者组中的不同消息者实例可以运行在不同的进程甚至不同的服务器上 如果
所有的消费者实例都在同一个消费者组上,那么消息记录将被平均分配给消费者实例。如果消费者实例都在不同的消费者组上,那么每一条消息记录会被广播到每
一个消费者实例.
示例:
举个例子,如上图所示一个两个节点的Kafka集群上拥有一个四个partition (PO-P3)的topic。有两个 消费者组都在消费这个topic中的数据,消费者组A有
两个消费者实例,消费者组B有四个消费者实例。从图中我们可以看到,在同一个消费者组中,每个消费者实例可以消费多个分区,但是每个分区最多只 能被消费
者组中的一个实例消费.也就是说,如果有一个4个分区的主题,那么消费者组中最多只能有4 个消费者实例去消费,多出来的都不会被分配到分区。其实这也很好
理解,如果允许两个消费者实例同 时消费同一个分区,那么就无法记录这个分区被这个消费者组消费的offset了。如果在消费者组中动态的上线或下线消费者,
那么Kafka集群会自动调整分区与消费者实例间的对应关系
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。