Apache Kafka 简介与使用

Kafka 可以简单理解为分布式MQ,用Scala编写,运行在JVM上。

分布式程序,除了其自身的基本概念外,最重要的就是要知道它是如何实现高并发和高可用的:

  • Kafka 用 Partitions 实现了高并发;
  • Kafka 用 Partitions 复制 + Zookeeper 实现了高可用;

注:以下内容中英文混合存在,只是为了描述方便。更全面和准确的文档,可以查看Kafka官网

一、Kafka - 简介


Apache Kafka is a distributed streaming platform. 卡夫卡是一个分布式流平台。

它有三个关键的能力:

  1. 消息队列 - 可以使你能pub/sub streams of records. 从这方面看,它很像一个消息队列

  2. 容错存储 - 使你可以存储streams of records in a fault-tolerant way.

  3. 流处理 - 可以使你能够处理 stream of records 在它们出现时。

有三个基本概念:

  1. 作为集群运行 - Kafka is run as a cluster on one or more servers.

  2. 主题 - The Kafak cluster stores stream of records in categories called topics.

  3. Record = key + value + timestamp - Each record consists of a key, a value and a timestamp.

有四个核心API:

  1. 发布者 - The Producer API allows an application to publish a stream of records to one or more Kafka topics.

  2. 消费者 - The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them.

  3. 流处理 - The Streams API allows an application to act as stream processor, 使得你能从topics消费输入流和产生输出流到topics上。

  4. 连接器 - The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems.

Kafka 构建了一个语言无关的基于TCP protocol 的通信机制,用来高性能的实现clients 和 servers 之间通信;


1、Topics and Logs - 主题和日志

  1. Topic - 主题

    一个 topic 是一个类型名,指示哪些records被发布。

    对于每个 topic, Kafka 集群会将其保存为一个被分区的log ,就像下图这样:

    这里写图片描述
    (Topic = partitioned log 0 + partitioned log 1 + partitioned log 2)

    1. 每个分区都是一个ordered, immutable sequence of records,它们会被不断的追加到 a structured commit log.

    2. 每个分区中的记录都被分配一个顺序的id,称为唯一标示此分区内每个记录的 offset.

    3. Kafka集群保存所有被发布的 records 无论它们是否已被消费,可以用一个配置来控制。
      例如:log.retention.hours=148,代表在记录发布的6天后才会将其删除。

  2. Log - 日志

    这里写图片描述

    1. 事实上,每个消费者唯一需要持有的元数据基本上就是log的the offset or position,消费者控制自己的offset:可以线性的读、也可以从任何位置开始读,因为自己控制position。

    2. 以上这些Topic和Log的特性决定了消费者消费这件事是非常廉价容易的,他们可以随意来随意消费而互不影响

  3. Partitions - 分区

    Log的Partitions即是水平切分,它服务于以下两个目的:

    1. 扩容)首先,可以使Log的扩展能超过安装在一台单机上的大小限制。

      每个Partition必须安装在托管它的服务器上,但是Topic可以有很多Partition,所以Topic理论上可以处理无限量的数据;

      分区会被均衡的分布于集群中的每台机器上。

    2. 高并发)第二,Partition们作为并行的单位,更多的是在这点上;


2、Distribution - 分布式

Log的分区们会被分布在Kafka服务器集群中,每个服务器处理自己分到分区。每个分区会被复制为创建时指定的复制数量,参数--replication-factor N

每个partition有一个被称为”Leader”的节点,0或多个”Followers”:

  • Leader处理所有读和写请求,Followers被动的从leader复制。

  • 如果Leader挂掉了,那么集群会在Follower中重新选出一个Leader;


3、举例

一个有3台服务器的Kafka集群。(安装过程在后面,这是假设安装过了)

  1. 使用如下命令创建一个Topic:

    
    # Topic名 TestTopic001,分区数2,复制因子1(即不复制)
    
    [root@iZ28gss3aiwZ bin]# ./kafka-topics.sh --create --topic TestTopic001 --partitions 2 --replication-factor 1 --zookeeper zookeeper1.host:2181,zookeeper2.host:2181,zookeeper3.host:2181

    然后查看:

    [root@iZ28gss3aiwZ bin]# ./kafka-topics.sh <
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值