没有合适的资源?快使用搜索试试~ 我知道了~
首页kafka集群部署文档(部署,运维,FAQ)
资源详情
资源评论
资源推荐

Kaa 集群队列简介
Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的
消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息。
支持通过 Kafka 服务器和消费机集群来分区消息。
官方下载地址:hp://kaa.apache.org/downloads
架构组件
中发布订阅的对象是 。我们可以为每类数据创建一个 ,把向 发布
消息的客户端称作 ,从 订阅消息的客户端称作 。
和 可以同时从多个 读写数据。一个 集群由一个或多个 服
务器组成,它负责持久化和备份具体的 消息。
:消息存放的目录即主题
:生产消息到 的一方
:订阅 消费消息的一方
: 的服务实例就是一个
消息发送时都被发送到一个 ,其本质就是一个目录,而 由是由一些
分区日志组成其组织结构如下图所示:

我们可以看到,每个 中的消息都是有序的,生产的消息被不断追加到
上,其中的每一个消息都被赋予了一个唯一的 值。•
集群会保存所有的消息,不管消息有没有被消费;我们可以设定消息的过期时间,
只有过期的数据才会被自动清除以释放磁盘空间。比如我们设置消息过期时间为 天,那
么这 天内的所有消息都会被保存到集群中,数据只有超过了两天才会被清除。•
需要维持的元数据只有一个–消费消息在 中的 值, 每
消费一个消息, 就会加 。其实消息的状态完全是由 控制的,
可以跟踪和重设这个 值,这样的话 就可以读取任意位置的
消息。•
把消息日志以 的形式存放有多重考虑,第一,方便在集群中扩展,每个
可以通过调整以适应它所在的机器,而一个 又可以有多个 组成,
因此整个集群就可以适应任意大小的数据了;第二就是可以提高并发,因为可以以
为单位读写了。
Kaa 核心组件
!、和
通过上面介绍的我们可以知道, 中的数据是持久化的并且能够容错的。 允许
用户为每个 设置副本数量,副本数量决定了有几个 来存放写入的数据。如果
你的副本数量设置为 ",那么一份数据就会被存放在 " 台不同的机器上,那么就允许有
个机器失败。一般推荐副本数量至少为 ,这样就可以保证增减、重启机器时不会影响到
数据消费。如果对数据持久化有更高的要求,可以把副本数量设置为 " 或者更多。•
中的 是以 的形式存放的,每一个 都可以设置它的
数量, 的数量决定了组成 的 的数量。 在生产数据时,会按
照一定规则(这个规则是可以自定义的)把消息发布到 的各个 中。上面将
的副本都是以 为单位的,不过只有一个 的副本会被选举成 作

为读写用。•
关于如何设置 值需要考虑的因素。一个 只能被一个消费者消费(一个
消费者可以同时消费多个 ),因此,如果设置的 的数量小于
的数量,就会有消费者消费不到数据。所以,推荐 的数量一定要大
于同时运行的 的数量。另外一方面,建议 的数量大于集群
的数量,这样 就可以均匀的分布在各个 中,最终使得集群负载
均衡。在 每个 都有上百个 。需要注意的是, 需要为每个
分配一些内存来缓存消息数据,如果 数量越大,就要为 分配更
大的 #。
直接发送消息到 上的 ,不需要经过任何中介一系列
的路由转发。为了实现这个特性, 集群中的每个 都可以响应 的请
求,并返回 的一些元信息,这些元信息包括哪些机器是存活的, 的
都在哪,现阶段哪些 是可以直接被访问的。•
客户端自己控制着消息被推送到哪些 。实现的方式可以是随机分配、
实现一类随机负载均衡算法,或者指定一些分区算法。 提供了接口供用户实现自定
义的分区,用户可以为每个消息指定一个 $,通过这个 $ 来实现一些 ##
分区算法。比如,把 作为 $ 的话,相同 的消息将会被推送到同
一个分区。•
以 # 的方式推送数据可以极大的提高处理效率,可以将消息在内存
中累计到一定数量后作为一个 # 发送请求。# 的数量大小可以通过 的
参数控制,参数值可以设置为累计的消息的数量(如 %&& 条)、累计的时间间隔(如
&&)或者累计的数据大小'(。通过增加 # 的大小,可以减少网络请求和磁
盘 )* 的次数,当然具体参数设置需要在效率和时效性方面做一个权衡。•
可以异步的并行的向 发送消息,但是通常 在发送完消息之后
会得到一个 响应,返回的是 值或者发送过程中遇到的错误。这其中有个非
常重要的参数“+这个参数决定了 要求 收到确认的副本
个数,如果 设置数量为 &,表示 不会等待 的响应,所以,
无法知道消息是否发送成功,这样有可能会导致数据丢失,但同时, 值为
& 会得到最大的系统吞吐量。•
若 设置为 ,表示 会在 收到消息时得到 的一个
确认,这样会有更好的可靠性,因为客户端会等待直到 确认收到消息。若设置为,
, 会在所有备份的 收到消息时得到 的确认,这个设置可以
得到最高的可靠性保证。•
消息有一个定长的 # 和变长的字节数组组成。因为 消息支持字节数组,
也就使得 可以支持任何用户自定义的序列号格式或者其它已有的格式如 -#
-.、 等。 没有限定单个消息的大小,但我们推荐消息大小不要超过
/通常一般消息大小都在 0 & 之前。
剩余13页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0