Skip to content

01 kafka学习笔记

Jinxin Chen edited this page Dec 20, 2019 · 1 revision

概述

定义

分布式的,基于发布/订阅模式的消息队列

发布订阅模式2种:

  1. 队列主动推,但受限于消费者处理速度
  2. 消费者主动拉,但需不断轮询

基础架构

原理图

  1. producer发送消息给broker
  2. broker包含多个topic
  3. topic包含多个partition(不同服务器,且有副本)
  4. 同一个topic可以被同一个Consumer group中的某个consumer消费一次
  5. zookeeper用户保存kafka集群的一些信息
  6. 消费者要记录消息的offset,会在zk/kafka(0.9版本变化)记录信息

快速入门

kafka.apache.org

启动:

  1. 每台执行:bin/kafka-server-start.sh -daemon config/server.properties
  2. 写bash脚本批量执行

副本数需<=broker数量,分区数量没有此限制

kafka没有配主副节点,组集群主要是通过将brokerid注册到zookeeper的方式

总结:10

架构深入

topic是逻辑上的概念,partition是物理上的概念,topic以topic_partition文件夹方式命名

生产者的消息会追加到log文件末尾,为了防止log文件过大,kafka采取了分片(segment)和索引(index)机制。

index文件以数组的方式存储消息的偏移量和大小,segment文件大小为1G,文件名为该文件的起始消息offiset。

查找某条消息的步骤为,先通过二分查找找到消息在哪个segment文件,然后通过index查找数据的偏移量和大小,然后通过seek方法获取数据

数据存储到哪个分区:

  1. 直接指定
  2. key计算hash然后取谋
  3. 随机生成一个整数,然后自增rr

数据可靠性:producer发送数据,等待ack,那么,何时发送ack呢:

  1. 半数以上完成同步,就发ack,延迟低,但容忍n台节点故障需2n+1个副本
  2. 全部完成同步,才发ack,延迟高,但只需n+1个副本

kafka选择的第2种,但做了优化,ISR

akcs参数配置: 0. producer不等待brocker的ack

  1. producer等待broker的ack,leader落盘成功就返回ack -1. producer等待broker的ack,leader和follower全部落盘才返回ack

注意,当-1时,isr的follower=1时,也有可能丢数据,此时相当于副本数=1

15, 6:53

api

监控

Flume对接

Clone this wiki locally