Kafka| 青训营笔记

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

Kafka 介绍

Kafka 是什么

Kafka 是使用 scala 开发的支持包括 golang 在内的多语言客户端的分布式、分区化、可复制提交的日志服务。

Kafka 的基本概念

  • Message(消息):消息,通信的基本单位,Producer 可以向 Topic 发布一些消息
  • Topic(话题):Kafka 中用于区分不同类别信息的类别名称,由 Producer 指定
  • Producer(消息生产者):将消息发送给 Kafka 特定 Topic 的对象
  • Consumer(消息消费者):订阅并处理特定的 Topic 中消息的对象
  • Broker(Kafka服务器集群):保存已发布消息的一组服务器,每个集群都可以视为一个 Broker,Consumer 从 Broker 中获取数据,处理消息
  • Partition(分区):每个 Topic 可以分为多个 Partition,每个 Partition 是一个消息队列

消息

消息由一个固定大小的报头和可变长度但不透明的字节阵列负载。报头包含格式版本和CRC32效验和以检测损坏或截断,其格式如下所示:

    1. 4 byte CRC32 of the message
    2. 1 byte "magic" identifier to allow format changes, value is 0 or 1
    3. 1 byte "attributes" identifier to allow annotations on the message independent of the version
       bit 0 ~ 2 : Compression codec
           0 : no compression
           1 : gzip
           2 : snappy
           3 : lz4
       bit 3 : Timestamp type
           0 : create time
           1 : log append time
       bit 4 ~ 7 : reserved
    4. (可选) 8 byte timestamp only if "magic" identifier is greater than 0
    5. 4 byte key length, containing length K
    6. K byte key
    7. 4 byte payload length, containing length V
    8. V byte payload

Kafka 的特点

  • 多语言支持:支持 c++、java、python 以及 go 等语言;
  • 分布式的:Kafka 的服务端集群(borker)、消息生产者(producer)及消息消费者(consumer)都可以是分布式的
  • 高吞吐量:Kafka 每秒可以产生约 50MB 消息,每秒处理 110MB 消息
  • 自动平衡:Kafka 中消息被处理的状态是在 consumer 端维护,而不是由 server 端维护,因此失败时能自动平衡
  • 扩展性高:Kafka 可以实现不同应用程序之间的解耦,进而成为了一个可扩展、高可靠的消息系统
  • 易维护性:无需停机即可扩展机器
  • 可持久化:可以通过将数据持久化到硬盘以及 replication 来防止数据丢失

常用场景

  • 监控
  • 流处理
  • 日志聚合
  • 消息队列
  • 持久性日志
  • 用户行为追踪

Kafka 的安装

下介绍 windows 下的 Kafka 的搭建过程 安装 Kafka 需要提前安装 JDK,并配置环境变量

下载

kafka.apache.org/downloads

安装

将压缩包解压到本地

配置

  1. 打开 config 文件夹下的 server.properties 文件 2.修改 log.dirs=D:\kafka\kafkalogs 3.打开 config 目录下的 zookeeper.properties 4.修改 dataDir=D:\kafka\zookeeper

使用 go 操作 Kafka

第三方库

go get github.com/Shopify/sarama