Kafka(1)
2015-07-23 15:07
295 查看
Kafka是一个分布式的消息系统。
Broker Kafka集群包含一个或多个服务器
Producer 发送消息到broker
Consumer 从broker读取消息
kafka使用Zookeeper控制分布式服务协调同步。
每个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校验不通过的消息会直接被丢弃掉。
class这一参数来指定,该class必须实现kafka.producer.Partitioner接口。每个Parition都会有个序号,序号从0开始。
kafka集群会保留所有的消息,提供了两种策略来清除旧数据。一种是基于时间,另一种基于partition文件大小。
//删除一周前的数据
log.retention.hours=168
//partition文件最大容量
log.segment.bytes=1073741844
d
系统结构
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。相关文章推荐
- linux c 线程通信和同步
- css清除浮动的几种方法以及对应规范说明
- JQuery学习笔记
- 淘宝之初:湖畔花园小区里诞生的巨人
- ComDB的意义
- HttpClient的超时用法小记
- linux删除大量文件----rm,rsync
- 配置 Phpstorm + Xdebug + xampp
- Activemq消息确认机制
- 浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别
- iOS- 详解文本属性Attributes
- 关键字static和this
- 新手必知:Cisco IOS软件基础
- JS下拉自动加载
- LeetCode "Search a 2D Matrix II"
- 利用oclHashcat破解Microsoft Office 97-03, 2007, 2010, 2013 密码
- logback 常用配置详解(二) <appender>
- 百度echarts柱状图
- Servlet生命周期以及Servlet的三种写法
- css学习笔记