1、Kafka概述

1.1. Kafka简介

1613888664749

1.2. Kafka的设计目标

 

1.3. Kafka的发展历史

  1. 2010年底,开源到github,初始版本为0.7.0;
  2. 2011年7月因为备受关注,kafka正式捐赠给apache进行孵化;
  3. 2012年10月,kafka从apache孵化器项目毕业,成为apache顶级项目;
  4. 2014年,jay kreps,neha narkhede,jun rao离开linkedin,成立confluent,此后linkedin和confluent成为kafka的核心贡组织,致力于将kafka推广应用;
  5. Kafka集成了分发、存储和计算的“流式数据平台”,不再是一个简单的分布式消息系统。

 

1.4. Kafka的常见应用场景

日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

消息系统:解耦和生产者和消费者、缓存消息等。

用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

流式处理:比如spark streaming、flink和storm等整合应用。

 

1.5. Kafka的核心概念

image-20220507162025695

如图中,红色方框里面的都是kafka相对较核心概念,具体阐述如下:

Broker(代理):Kafka 节点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka 集群,每一个broker可以有多个topic。

Producer(生产者): 生产 message (数据)发送到 topic。

Consumer(消费者):订阅 topic 消费 message,consumer 作为一个线程来消费。

Consumer Group(消费组):一个 Consumer Group 包含多个 consumer,这个是预先在配置文件中配置好的。

Topic(主题):一种类别,每一条发送到kafka集群的消息都可以有一个类别,这个类别叫做topic,不同的消息会进行分开存储,如果topic很大,可以分布到多个broker上,例如 page view 日志、click 日志等都可以以 topic的形式存在,Kafka 集群能够同时负责多个 topic 的分发。也可以这样理解:topic被认为是一个队列,每一条消息都必须指定它的topic,可以说我们需要明确把消息放入哪一个队列。

Partition(分区):topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。

Replicas(副本):每一个分区,根据副本因子N,会有N个副本。比如在broker1上有一个topic,分区为topic-1, 副本因子为2,那么在两个broker的数据目录里,就都有一个topic-1,其中一个是leader,一个replicas。

Segment:partition 物理上由多个 segment 组成,每个 Segment 存着 message 信息。

 

1.6. Kafka的核心API

 

2、Kafka环境部署

2.1. 单机版本搭建

单机版本的搭建最为快速、简单,但是使用场景非常局限。仅适用于进行简单的测试阶段。

强烈建议安装多Broker的集群版本!

2.1.1. 下载并解压安装

下载地址:http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz

注:

安装包的命名中,2.12表示Scala的版本。由于Kafka是使用Scala语言来编写的,因此在下载Kafka的时候,会让你选择Scala语言的版本。你只需要选择与你本地的Scala版本相符的Kafka即可。

2.1.2. 启动服务

2.1.2.1. 启动ZooKeeper

Kafka严重依赖ZooKeeper,所以我们在启动Kafka之前,需要启动ZooKeeper服务。Kafka提供给咱们快速使用的zk服务,即解压开压缩包,其根目录下的bin目录下提供zk的启停服务,但仅适用于单机模式(zk也是单实例)。多broker模式强烈建议使用自行部署的ZooKeeper。

Kafka自带的ZooKeeper的启停脚本如下:

image-20220507010456330

启用Kafka自带的ZooKeeper服务

2.1.2.2. 启动Kafka

启动之后,可以使用jps命令查看当前节点的进程。如果出现名为kafka的进程,说明Kafka的单机版本搭建完成。

2.1.3. 创建主题

在Kafka中,消息是需要存储与主题中的,Producer会将消息写入到指定的Topic中,而消费者会从指定的Topic中读取数据。

2.1.4. 列出主题

2.1.5. 发送消息

Kafka自带一个命令行客户端(client),它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每一行都将作为单独的消息发送。

运行producer,然后输入一些信息到控制台并发送到服务端:

2.1.6. 消费消息

kafka有一个消费者客户端命令,它可以转存消息到标准输出:

注意:

如果有一个producer生产消息终端,另外有多个consumer终端,那么多个consumer将会同时立即消费。

所有命令行都有更多的额外参数,可以参考文档查看更多的options。