kafka(1)-基本术语

原创
2017/07/14 19:06
阅读数 129

topic:自定义的一个队列
broker:broker通常就是一台物理机器,在上面运行kafka server的一个实列,每个broker会给自己分配一个唯一的broker id。broker集群通过zookeeper集群来管理的。在0.9.0中,producer/consumer已经不会依赖zookeeper来获取集群的配置信息,而是通过任意一个broker来获取整个集群的配置信息

如上图所示:只有服务端依赖zk,客户端不依赖zk

partition

kafka的topic,在每个机器上,是用文件存储的。partition就是文件的目录,目录下面包含包含index后缀和log后缀的文件

replica/leader/follower

每个topic的partion的所有消息,都是存储了多份,在多个broker上冗余存储,这多台机器就叫一个replica集合。在这个replica集合中,需要选出1个leader,剩下的是follower。也就是master/slave。发送消息的时候,只会发送给leader,然后leader再把消息同步给followers(以pull的方式,followers去leader上pull,而不是leader push给followers)。这里replica/leader/follower都是逻辑概念,并且是相对"partion"来讲的,而不是"topic"。还有一点是leader收到消息之后,是否直接返回给produce,取决于客户端ack(0,1,all)的配置,然后followers在进行同步。

消息队列的各种策略和语义

1.ack:request.required.acks有三种策略分别如下;0表示不等服务器ack就返回了,性能最高,可能丢数据;1表示leader确认消息存下来了,再返回;all表示leader和当前ISR中所有replica都确认消息后,在返回;

注:在0.9.0以前的版本是用-1表示all

同步发送vs异步发送

0.8.2开始,引入了一套新的Java版的client api,需要如下四个参数

1)队列的最大长度:buffer.memory//缺省32M

2)队列满了,客户端是阻塞,还是抛异常出来:block.on.buffer.full//true:阻塞消息/false:抛异常

3)发送的时候,可以批量发送的数据量:batch.size//default:16384,即16k

4)最长等多长时间,批量发送:linger.ms//缺省是0;//类似TCP/IP协议中的linger algorithm

5)消息的最大长度:max.request.size//缺省是1048576,即1M

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部