kafka知识 --kafka权威指南

我想既然Kafka是为了写数据而产生的,那么用作家的名字来命名会显得更有意义.我在大学时期上过很多文学课程,很喜欢Franz
Kafka.况且,对于开源项目来说,这个名字听起来很酷.因此,名字和应用本身基本没有太多联系 --Jay Kreps

第1章 初识Kafka

1.2.1 消息和批次
kafka的数据单元被称为消息.
为了提高效率,消息被分批次写入kafka.批次就是一组消息,这些消息属于同一个主题和分区.
如果每一个消息都单独穿行于网络,会导致大量的网络开销,把消息分成批次传输可以减少网络开销.

1.2.3 主题和分区
Kafka的消息通过主题进行分类.主题好比数据库的表,或者文件系统里的文件夹.主题可以被分为若干个分区,一个分区就是一个提交日志.消息以追加的方式写入分区,然后以先进先出的顺序读取.
kafka知识 --kafka权威指南

1.2.4 生产者和消费者
生产者创建消息.也被称为发布者写入者.
一般情况下,一个消息会被发布到一个特定的主题上.生产者在默认情况下把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区.
在某些情况下,生产者会把消息直接写到指定的分区.通常是通过消息键和分区器来实现的,分区器为键生成一个散列值,并将其映射到指定的分区上.可以保证包含同一个键的消息会被飞到同一个分区上.生产者也可以使用自定义的分区器,根据不同的业务规则将消息映射到分区.

消费者读取消息.也被称为订阅者读者.消费者订阅一个或多个主题,按照消息生成的顺序读取它们.消费者通过检查消息的偏移量来区分已经读取过的消息.偏移量是另一种元数据,它是一个不断递增的整数值,在创建消息时,kafka会把它添加到消息里.在给定的分区里,每个消息的偏移量都是唯一的.消费者把每个分区最后读取的消息偏移量保存在Zookeeper或Kafka上,如果消费者关闭或重启,它的读取状态不会丢失.
消费者是消费者群组的一部分,会有一个或多个消费者共同读取一个主题.群组保证每个分区只能被一个消费者使用.
如图,有3个消费者同时读取一个主题.其中的两个消费者各自读取一个分区,另一个消费者读取其他两个分区.消费者与分区之间的映射通常被称为消费者对分区的所有权关系.
通过这种方式,消费者可以消费包含大量消息的主题.而且,如果一个消费者失效,群组里的其他消费者可以接管失效消费者的工作.
kafka知识 --kafka权威指南
1.2.4 broker和集群
一个独立的kafka服务器被称为broker.broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存.broker为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息.
broker是集群的组成部分.每个集群都有一个broker同时充当了集群控制器的角色(自动从集群的活跃成员中选举出来).控制器负责管理工作,包括将分区配给broker和监控broker.在集群中,一个分区从属于一个broker,该broker被称为分区的首领.一个分区可以分配给多个broker,这个时候会发生分区复制.这种复制机制为分区提供了消息冗余,如果有一个broker失效,其他broker可以接管领导权.不过,相关的消费者和生产者都要重新链接到新的首领.

kafka知识 --kafka权威指南
保留消息(在一定期限内)是kafka的一个重要特性.kafka broker集群默认的消息保留策略是:要么保留一段时间(比如7天),要么保留到消息达到一定大小的字节数(比如1GB).可以通过把主题当作紧凑型日志,只有最后一个带有特定键的消息会被保留下来.

1.2.6 多集群
数据类型分离
安全需求隔离
多数据中心(灾难恢复)

kafka提供了一个叫做MirrorMaker的工具,可以用它来实现集群间的消息赋值.MirrorMaker的核心组件包含了一个生产者和一个消费者,两者之间通过一个队列相连.
消费者从一个集群读取消息,生产者把消息发送到另一个集群上.
kafka知识 --kafka权威指南

第二章 安装kafka

参考链接 https://blog.csdn.net/Cocktail_py/article/details/89877741

2.3.1 常规配置
1.broker. id
标识符.默认值0.在整个Kafka集群中必须是谓一致.
2.zookeeper.connect
localhost:2181表示这个Zookeeper是运行在2181端口.hostname:port/path
hostname是Zookeeper服务器的机器名或IP地址;
port是Zookeeper的客户端连接端口;
/path(可选)Zookeeper路径,作为Kafka集群的chroot环境
3.log.dirs
Kafka把消息保存在磁盘上,通过log.dirs指定的目录.用一组逗号分隔的本地文件系统路径.如果指定了多个路径,broker根据"最少使用"原则,往拥有最少数目分区的路径新增分区
4.num.recovery.threads.per.data.dir
一下3种情况,kafka会使用可配置的线程池来处理日志片段
服务器正常启动,用于打开每个分区的日志片段;
服务器崩溃后重启,用于检查和截短每个分区的日志片段;
服务器正常关闭,用于关闭日志片段.
如果num.recovery.threads.per.data.dir=8,log.dir指定了3个路径,那么总共需要24个线程

5.auto.create.topics.enable
当一个生产者开始往主题写入消息时;
当消费者开始从主题读取消息时;
当任意一个客户端向主题发送元数据请求时;

2.3.2 主题的默认配置

  1. num.partitions
    新创建的主题将包含多少个分区.主题分区的个数必须要大于broker的个数.
    如何选定分区数量
    kafka知识 --kafka权威指南
    2.log. retention. ms
    kafka通常根据时间来决定数据可以被保留多久.默认使用log.retention.hours参数来配置时间,默认值为168小时.log. retention. minutes和log. retention. ms.推荐使用log. retention. ms , kafka会优先使用具有最小值的那个参数.
    3.log.retention.bytes
    保留字节数,用于判断消息是否过期,作用在每一个分区上.如果一个包含8个分区的主题,并且log.retention.bytes被设为1GB,那么这个主题最多可以保留8GB的数据.
    4.log.segment.bytes
    当日志片段大小达到log.segment.bytes指定的上限(默认是1GB)时,当前日志片段就会被关闭,一个新的日志片段被打开.如果一个日志片段被关闭,就开始等待过期.
    5.log.segment.ms
    指定多长时间之后日志片段会被关闭.默认情况下log.segment.ms没有设定值,所以只能根据大小来关闭日志片段.
    6.message.max.bytes
    broker通过设置message.max.bytes参数来限制单个消息的大小,默认值是1000 000,也就是1MB.
    这个值对性能有显著的影响.值越大,那么负责处理网络连接和请求的线程就需要花越多的时间来处理这些请求.还会影响磁盘写入快的大小,从而影响IO吞吐量.
    更新中…