Kafka【分布式提交日志,分布式流平台】

消息

数据单元就是消息,消息由字节数组组成,消息没有特别格式和含义。

主题

Kafka通过主题对消息分类,一个主题可以分为若干分区。消息用追加的方式写入分区,然后以先进先出的顺序读取,一个分区内消息的读取是有序的,一个主题内消息的读取不能保证有序。

生产者【发布者】

创建消息

消费者【订阅者】

读取消息

偏移量

一种元数据,是不断递增的整数,创建消息是就会生成,每个分区由唯一的偏移量

broker

一个独立的Kafka服务器被称为broker,broker接受生产者的消息,设置偏移量,提交消息到磁盘保存,broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

保留消息

Kafka broker 默认的消息保留策略:或保留时长限制,或保留消息大小限制。到达上限即删除。主题可以配置自己的保留策略。

再均衡

kafka consumer所订阅的topic发生变化时发生的一种分区重分配机制。

常用配置

  1. broker.id

每个 broker 都需要有个标识符,使用 broker.id来表示。它的默认值是0 ,也可以被设成其任意整数。这个值在整个 Kfka 集群里必须是唯的。

  1. port配置端口,【如果使用 1024 以下的端口,需要使用 root 权限启动Kafka(不建议)】
  2. zookeeper.connect用于保存 broker 元数据的 Zookeeper 地址。格式如下 hostname:port/path
  • hostname :Zookeeper的服务器地址
  • port :Zookeeper的端口
  • path : Zookeeper的安装路径,不指定为默认安装路径
  1. log.dirs

日志存放目录

  1. num.recovery.threads.per.data.dir处理日志的线程数,如果此配置为4,log.dir为3个路径则需要12个线程。对于如下 种情况, Kafka 会使用可配置的钱程 来处理日志片段。
  • 服务器正常启动,用于打开每个分区的日志片段
  • 服务器崩愤后重启,用于检查和截短每个分区的日志片段:
  • 服务器正常关闭,用于关闭日志片段。
  1. auto.create .topics.enable默认值是true , 默认情况下, Kafka 会在如下几种情形下自动创建主题
  • 当一个生产者开始往主题写入消息时。
  • 当一个消费者开始从主题读取消息时。
  • 任意 个客户端向主题发送元数据请求时。
  1. num.partitions新创建的主题包含的分区数
  2. log.retention.hours数据的保留时间,默认168小时。log.retentition.minuteslog.retentition.ms 参数也是配置数据保留时间,如果设置了这三个参数的多个,会使用最小数值的那个时间。
  3. log.retention.bytes保留数据的大小限制默认为1G,作用域是每个分区。如果同时设置了保留时间和保留数据大小限制,任意条件满足即可触发。
  4. log.segment.bytes日志片段的大小,默认1G,如果到达这个上限,当前日志片段就会被关闭,一个新的日志片段就会被打开。时间戳获取偏移量时会检查最后的修改时间大于指定时间的已关闭日志片段,所以对于偏移量,日志片段越小,结果越准确。
  5. log.segment.ms日志片段关闭时间, log.segment.byteslog.segment.ms 这两个参数也不冲突,一方满足即可触发。
  6. message.max.bytes限制单个信息的大小默认值是1M,如果消息超过此配置,broker会返回错误信息。该消息限制的是压缩后的消息大小。【注:消费者在客户端设置 fetch.message,max.bytes 需要与服务器设置的消息大小做协调】