一、获取kafka
官网下载地址:https://kafka.apache.org/downloads,下载后传到Linux服务器上。
或者直接在Linux中使用wget命令进行下载:
wget https://www.apache.org/dyn/closer.cgi?path=/kafka/3.1.0/kafka_2.13-3.1.0.tgz
拥有安装包后,对其进行解压并切换到解压目录:
tar -xzf kafka_2.13-3.1.0.tgz
cd kafka_2.13-3.1.0
二、启动kafka
前提条件:系统中需安装了Java8及以上
1、启动zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
2、启动kafka broker
打开另一个会话窗口,切换到刚才的kafka解压目录,执行:
bin/kafka-server-start.sh config/server.properties
三、创建一个topic
kafka是一个分布式事件流平台,你可以通过任何机器来读取、写入、存储和处理这些事件。一些典型的事件例子是交易支付,手机位置的更新、订单运输、物联网设备的传感器信息上报等。这些事件都被管理和存储在topic中。可以这么理解,topic就类似于系统中的文件夹,而事件就是一个个文件。
所以在你创建第一个事件之前,你必须创建一个topic。在kafka的安装目录下执行:
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
# 若kafka版本为2.2之前,则应用--zookeeper localhost:2181替换bootstrap-server localhost:9092
上面的命令中,quickstart-events是topic的名字,你可以将其该为任意的,bootstrap-server localhost指明的是zookeeper的地址。
topic创建好后,可执行以下命令查看topic的详情:
bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
四、将事件写入topic
kafka客户端通过网络与kafka broker进行交互读写事件。一旦broker收到事件,将会持久保存,并具有分区容错性。
在kafka的安装目录下执行:
# 该命令会开启一个输入控制台,输入任何内容后回车,即是一个事件,可按Ctrl C退出
bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
# 若kafka版本为2.2之前
bin/kafka-console-producer.sh --topic quickstart-events --broker-list localhost:9092
五、读取事件
打开另一个会话窗口并切换到kafka安装目录下执行:
bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
该命令会打印出quickstart-events这个topic中的事件
六、kafka事件详解
1、什么是事件流
事件记录了世界或你的业务中“发生了某事”的事实。 在文档中也称为记录或消息。 当您向 Kafka 读取或写入数据时,您以事件的形式执行此操作。 从概念上讲,事件具有键、值、时间戳和可选的元数据标头。
事件流可类似看作人体中央神经系统。它是“永远在线”世界的技术基础,在这个世界中,企业越来越多的由软件定义和自动化,并且软件的用户更多的是软件。
从技术上说,事件流是以流的形式在数据库、传感器、移动设备、云服务、应用软件等事件源中实时捕获数据,并可通过路由到不同的目的地保存下来实时或后续恢复使用。因此可确保数据的流动,以及将正确的信息在正确的时间放到正确的地方。
2、事件流可以用来做什么
事件流在许多工业和机构都有使用案例,最典型的例子包括:
- 用于处理实时的金融交易,例如股票交易所、银行和保险
- 用于实时监控汽车、卡车、航船,例如物流和汽车行业
- 实时捕获物联网设备或穿戴设备传感器的数据,例如工厂或风电场
- 用于收集和实时响应客户咨询和下单,例如零食业、酒店和旅游业
- 用于监控住院病人状况,确保及时治疗急救
- 用于服务基础数据平台、微服务中
3、kafka是一个事件流平台,这意味着什么
kafka整合了三项关键能力,因此你可以使用一个经过实际检验的解决方案来实现你端到端的事件流用例。
- 用于发布和订阅事件流,包括持续导入导出其他系统中的数据
- 对事件流数据的持久和可靠性存储
- 在事件发生时或回顾性的处理事件
所有这些功能都以分布式、高度可扩展、弹性、容错和安全的方式提供。
4、kafka工作原理简述
kafka是一个分布式系统,由通过高性能TCP协议沟通的服务端和客户端组成。可以被部署在裸机、虚拟机、容器、云环境中。
服务端:kafka以包含一个或多个服务器的集群方式运行,可以跨越多个数据中心或云区域,这些服务器中的部分组成了存储层,被称为brokers,另一部分运行kafka connect来持续的导入导出数据为事件流,以将 Kafka 与你现有的系统(例如关系数据库以及其他 Kafka 集群)集成。为了能够实现关键任务用例,Kafka 集群具有高度可扩展性和容错性:如果其中任何一个服务器出现故障,其他服务器将接管它们的工作,以确保持续运行而不会丢失任何数据。
客户端:它们允许您编写分布式应用程序和微服务,以并行、大规模和容错方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也是如此。 Kafka 附带了一些这样的客户端,这些客户端由 Kafka 社区提供的数十个客户端增强:客户端可用于 Java 和 Scala,包括更高级别的 Kafka Streams 库,用于 Go、Python、C/C++ 和许多其他编程 语言以及 REST API。
七、kafka核心概念
1、Producer
生产者是那些将事件发布(写入)到 Kafka 的客户端应用程序
2、Consumer
消费者是那些订阅(读取和处理)这些事件的程序
3、Topic
事件被组织并持久存储在Topic中,一个topic就是一个类别,或者说是某一种记录被推送到的目的地别名。主题在kafka中永远是多订阅者的,也就是说,一个主题可以有0个、一个或者多个消费者来订阅或者写入消息。对于每一个主题,kafka集群会维护一个分区日志,如下:
每一个分区都是一个有序的、不可变的记录序列,不断地添加到一个结构化的提交日志中,分区内的每个记录都分配有一个称为偏移量的顺序id号,它唯一地标识分区内的每个记录。
4、Partition
主题是分区的,这意味着主题分布在位于不同 Kafka broker上的多个“存储桶”中。数据的这种分布式放置对于可扩展性非常重要,因为它允许客户端应用程序同时从多个broker读取和写入数据。当一个新事件发布到一个主题时,它实际上是添加到主题的分区之一。流中的每一个record都包含一个key、value和时间戳, 具有相同事件key(例如,客户或车辆 ID)的事件被写入同一个分区,并且 Kafka 保证给定主题分区的任何消费者将始终以与写入事件完全相同的顺序读取该分区的事件。
kafka集群会持久保存一个发布的记录,无论它是否已被消费,保存的时间可通过配置决定。例如,如果持久化策略设置为两天,那么这个记录发布的两天内是可消费的,过后则会被丢弃。