第一章: 初始kafka
kafka 中文文档地址:http://orchome.com/kafka/index
1.1 发布与订阅系统:
数据的发送者不会直接把消息发送给接受者,,发布者以某种方式对消息分类,接受者订阅他们,以便接受特定的类型的消息。
1.2.1 消息和批次
kafka的数据单元被称作为消息,可以把消息看做为数据库里的一个数据行,或者一条记录
一组消息就是批次,消息被分批写入kafka,为了减少网络开销,做出了时间延迟和吞吐量做出权衡,批次越大,单位时间处理消息越多,传输时间越长,
1.2.2模式
消息模式,就是用一种数据结构来定义消息内容的结构。比如:json和xml,易用性好,可读性好,但是缺乏强类型处理,和版本兼容,kafka提供原生apache avro 作为序列化框架,原因是,紧促性的序列化格式,模式和消息体分开,版本前后兼容。
1.2.3 主题和分区
kafka消息通过主题进行分类。主题就好比数据库的表,或者文件系统里的文件夹,主题可以被分为若干个分区,一个分区就是提交日志,消息以追加方式写入日志,然后按照队列顺序读取。主题再包含多个分区时候,无法保证整个主题范围内消息的顺序,但是可以保证消息在单个分区内的顺序, 一个分区可以横跨多个服务器,因此来提高弹性的伸缩。
1.2.4 生产者和消费者
生产者创建消息,一般情况下,一个消息会被发布的特定的主题上,生产者在默认情况下吧消息均衡分布到主题的所有分区上,而并不关心特定消息会被写到那个分区,若要写到特定分区(自己实现分区器,实现hash ,散列值)
消费者读取消息, 消费者订阅一个或多个主题,并按照消息生产的顺序读取他们,消费者通过检查偏移量来区分已经读取过的消息,偏移量是另一种元数据,是不断递增的整数值。在0.9版本以前保存在zookeeper上,0.9后可设置到kfka上。
消费者是消费者组的一部分,也就是说,会有一个或多个消费者共同读取一个主题,群组保证每个分区只能被一个消费者使用,
1.2.5 broker和集群
一个独立的kafka服务器被称为broker。broker接受来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存,broker为消费者提供服务器,对读取分区的请求做出响应,返回已经提交到磁盘上的消息,
多个broker 是的一种有效连接,为集群,。集群里的broker 可以相互复制,
保留消息:保留策略 时间为7天,或者字节数组为1g,当两个都配置时候,取最小的,例如,当日同步消息较大,一天内就达到1g, ,就满足最小1g的条件,删除多余的消息。
1.2.6 多集群
kfka集群部署的增加,最好使用多个集群,
数据类型分离
安全需求隔离
多数据中心(灾难恢复)
多数据中心,需要他们之间复制消息,避免单节点宕机, 数据复制采用MirrorMaker 工具
1.3 为什么选择kafak
多个生产者,无需协调不同生产者的数据流,可以自定义不同的topic 统一数据格式
多个消费者,kafka支持多个消费者从一个单独的消息流读取数据,且互不影响, 多个消费者也可以组成群组,共享一个消息流,保证整个群组对每个给定的消息只处理一次。
基于磁盘的数据存储,
伸缩性。高性能 生态系统成熟
1.4 使用场景
活动跟踪
传递消息
度量指标和日志记录
提交日志
流处理