Kafka

Kafka 简介
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它因可以水平扩展和高吞吐率而被广泛使用。

Kafka 基本概念

  • Producer:消息和数据的生产者,向 Kafka 的一个 Topic 发布消息的进程/代码/服务
  • Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务
  • Consumer Group:逻辑概念,对于同一个 Topic,会广播给不同的 Group,一个 Group 中,只有一个 consumer 可以消费该消息
  • Broker:物理概念,Kafka 集群中的每个 Kafka 节点(即Kafka 所在服务器节点)
  • Topic:逻辑概念,Kafka 消息的类别,对数据进行区分、隔离
  • Partition:物理概念,Kafka 下数据存储的基本单元。一个 Topic 数据会被分散存储到多个 Partition,每一个 Partition 是有序的
  • Replication:同一个 Partition 可能会有多个 Replica,多个 Replica 之间数据是一样的(相当于副本的概念)
  • Replication Leader:一个 Partition 的多个 Replica 上,需要一个 Leader 负责该 Partition 上与 Producer 和 Consumer 交互
  • RelicaManager:负责管理当前 broker 所有分区和副本的信息,处理 KafkaController 发起的一些请求,副本状态的切换、添加/读取消息等(负责 Leader 的选举)

Partition

  • 每一个 Topic 被切分为多个 Partitions
  • 消费者数目少于或等于 Partition 的数目
  • Broker Group 中的每一个 Broker 保存 Topic 的一个或多个 Partitions
  • Consumer Group 中的仅有一个 Consumer 读取 Topic 的一个或多个 Partitions,并且是唯一的 Consumer

Replication

  • 当集群中有 Broker 挂掉的情况,系统可以主动地使 Replicas 提供服务
  • 系统默认设置每一个 Topic 的 replication 系数为1,可以在创建 Topic 时单独设置

Replication 特点

  • Replication 的基本单位是 Topic 的 Partition
  • 所有的读和写都从 Leader 进,Followers 只是作为备份
  • Follower 必须能够即使复制 Leader 的数据
  • 增加容错性与可扩展性

Kafka 基本结构

  • Producer Api
  • Consumer Api
  • Streams Api
  • Connectors Api

Kafka 特点

  • 分布式
    • 多分区
    • 多副本
    • 多订阅者
    • 基于 Zookeeper 调度
  • 高性能
    • 高吞吐量
    • 低延迟
    • 高并发
    • 时间复杂度为O(1)
  • 持久性与可扩展性
    • 数据可持久化
    • 容错性
    • 支持在线水平扩展
    • 消息自动平衡

Kafka 应用场景

  • 消息队列
  • 行为追踪
  • 元信息监控
  • 日志收集
  • 流处理
  • 事件源
  • 持久性日志(commit log)

Kafka 常用命令

  • 启动 Zookeeper

    1
    zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
  • 启动 Broker

    1
    zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
  • 查看主题列表

    1
    kafka-topics --list --zookeeper localhost:2181
  • 查看单个主题详情

    1
    kafka-topics --describe --zookeeper localhost:2181 --topic test-kafka-topic
  • 创建 Topic

    1
    2
    kafka-topics --create --zookeeper localhost:2181 --replication-factor 1
    --partitions 1 --topic test-kafka-topic
  • 生产消息

    1
    kafka-console-producer --broker-list localhost:9092 --topic test-kafka-topic
  • 查看消息

    1
    2
    kafka-console-consumer --bootstrap-server localhost:9092 --topic 
    test-kafka-topic --from-beginning

注意:–from-beginning 决定消费者是否从头开始消费

本文结束啦 感谢您阅读
如果你觉得这篇文章对你有用,欢迎赞赏哦~
0%