1、主要概念和术语
一个事件记录了一个事实,即世界或您的企业中发生了“某些事情”。在文档中也称为记录或消息。当您向Kafka读取或写入数据时,您将以事件的形式进行操作。从概念上讲,事件具有键,值,时间戳和可选的元数据标题。这是一个示例事件:
- 事件键:“爱丽丝”
- 赛事价值:“向Bob支付了$ 200”
- 活动时间戳记:“ 2020年6月25日,下午2:06”
生产者是那些向Kafka发布(写入)事件的客户端应用程序,而消费者是那些订阅(读取和处理)这些事件的客户端应用程序。在Kafka中,生产者和消费者之间完全脱钩并且彼此不可知,这是实现Kafka众所周知的高可伸缩性的关键设计元素。
活动被组织并持久地存储在主题中。非常简化,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。示例主题名称可以是“付款”。Kafka中的主题始终是多生产者和多订阅者:一个主题可以有零个,一个或多个向其写入事件的生产者,以及零个,一个或多个订阅这些事件的使用者。可以根据需要随时读取主题中的事件-与传统的消息系统不同,使用后事件不会被删除。相反,您可以通过按主题的配置设置来定义Kafka将事件保留多长时间,之后旧的事件将被丢弃。Kafka的性能相对于数据大小实际上是恒定的,因此长时间存储数据是完全可以的。
主题已分区,这意味着主题分布在不同Kafka经纪人上的多个“存储桶”中。数据的这种分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个代理读取数据或向多个代理写入数据。将新事件发布到某个主题时,它实际上会附加到该主题的一个分区中。具有相同事件键(例如,客户或车辆ID)的事件将写入同一分区,并且Kafka保证,给定主题分区的任何使用者都将始终以与写入时完全相同的顺序读取该分区的事件。
图:本示例主题具有四个分区P1-P4。通过在网络上将事件写入主题分区,两个不同的生产者客户端正在彼此独立地发布新事件。具有相同键(在图中由其颜色表示)的事件被写入相同的分区。请注意,如果合适,两个生产者都可以写入相同的分区。
为了使您的数据具有容错性和高可用性,可以在每个地理区域或数据中心之间复制每个主题,以便始终有多个代理具有数据副本,以防万一出错。对经纪人进行维护,等等。常见的生产设置是3的复制因子,即,始终会有三个数据副本。此复制在主题分区级别执行。
2、快速入门
下载 最新的Kafka版本并解压缩:
$ tar -xzf kafka_2.13-2.7.0.tgz
$ cd kafka_2.13-2.7.0
注意:您的本地环境必须安装了Java 8+。
# Start the ZooKeeper service# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
$ bin/zookeeper-server-start.sh config/zookeeper.properties
打开另一个终端会话并运行:
# Start the Kafka broker service
$ bin/kafka-server-start.sh config/server.properties
Kafka是一个分布式事件流平台,可让您跨多台机器读取,写入,存储和处理 事件
$ bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
查看详细信息
$ bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Kafka客户端通过网络与Kafka经纪人进行通信,以编写(或读取)事件。一旦收到,经纪人将以持久和容错的方式存储事件,只要您需要,甚至是永久的。
运行控制台生产者客户端,以将一些事件写入您的主题。默认情况下,您输入的每一行都会导致一个单独的事件写入该主题。
$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
第6步:使用KAFKA CONNECT将数据作为事件流导入/导出
在诸如关系数据库或传统消息传递系统之类的现有系统中,您可能拥有大量数据,以及已经使用这些系统的许多应用程序。 通过Kafka Connect,您可以将来自外部系统的数据连续地吸收到Kafka中,反之亦然。因此,将现有系统与Kafka集成非常容易。
一旦将数据作为事件存储在Kafka中,就可以使用Java / Scala的Kafka Streams客户端库处理数据 。它允许您实现关键任务实时应用程序和微服务,其中输入和/或输出数据存储在Kafka主题中。
- Ctrl-C如果尚未 停止生产者和消费者客户,请使用。
- 使用停止Kafka经纪人Ctrl-C。
- 最后,使用停止ZooKeeper服务器Ctrl-C。
如果您还想删除本地Kafka环境的任何数据,包括您在此过程中创建的所有事件,请运行以下命令:
$ rm -rf /tmp/kafka-logs /tmp/zookeeper