您的位置:首页 > 其它

Kafka(1)

2015-07-23 15:07 295 查看
Kafka是一个分布式的消息系统。

系统结构



Broker Kafka集群包含一个或多个服务器
Producer 发送消息到broker
Consumer 从broker读取消息
kafka使用Zookeeper控制分布式服务协调同步。

消息分发与管理

kafka使用topic进行消息管理,可以把topic当作queue。每条消息都必须指定它的topic。每个topic包含多个partition,每个partition在文件系统中对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件。每个partition由多个segment组成,每个segment中存储多条消息,消息id由其逻辑位置决定,这样可以由消息id直接定位到消息的存储位置。
每个partition在内存中对应一个index,记录其中每个segment的第一条消息偏移。
Producer发布到某个topic的消息会被均匀分布到多个partition上。broker收到消息后,找到对应的partition并将消息添加到最后一个segment上。当segment上的消息数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘上。只有flush到磁盘的消息consumer 才能收到。segment达到一定的大小后不会往该segment写数据,broker会创建新的segment。
每个consumer属于一个特定的consumer group。若不指定group name则属于默认的group。允许consumer group 对一个topic进行读取,但是只能读取不同的partition。不同的consumer group之间独立订阅。同一Topic的一条消息只能被同一个Consumer
Group内的一个Consumer消费,但多个Consumer Group可同时消费这一消息。如果需要实现广播,只要每个Consumer有一个独立的Group就可以了。要实现单播只要所有的Consumer在同一个Group里。用Consumer
Group还可以将Consumer进行自由的分组而不需要多次发送消息到不同的Topic。

kafka为每条消息计算CRC校验,用于错误检测,crc校验不通过的消息会直接被丢弃掉。

partition机制

在发送一条消息时,可以指定这条消息的key,Producer根据这个key和Partition机制来判断应该将这条消息发送到哪个Parition。Paritition机制可以通过指定Producer的paritition.
class这一参数来指定,该class必须实现kafka.producer.Partitioner接口。每个Parition都会有个序号,序号从0开始。

无状态broker

Broker没有副本机制,一旦broker宕机,该broker的消息将不能用。Broker不保存订阅者的状态,由订阅者自己保存。
kafka集群会保留所有的消息,提供了两种策略来清除旧数据。一种是基于时间,另一种基于partition文件大小。

//删除一周前的数据
log.retention.hours=168

//partition文件最大容量
log.segment.bytes=1073741844

Push & Pull

由Producer向broker push消息并由Consumer从broker pull消息。push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成Consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据Consumer的消费能力以适当的速率消费消息。

d

日志

server端日志分为5种类型:server、request、state、log-cleaner、controller。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: