Apache Kafka 是一个分布式流系统,可以发布和订阅记录流。另一方面,它是企业消息传递系统。它是高度快速、水平可扩展和容错的系统。 Kafka 有四个核心 API,
该 API 允许客户端连接到集群中运行的 Kafka 服务器,并将记录流发布到一个或多个 Kafka 主题。
该 API 允许客户端连接到集群中运行的 Kafka 服务器,并使用来自一个或多个 Kafka 主题的记录流。 Kafka 消费者拉取 来自 Kafka 主题的消息。
此 API 允许客户端通过使用来自一个或多个主题的流并将流生成到其他输出主题来充当流处理器。这允许转换输入和输出流。
此 API 允许编写可重用的生产者和消费者代码。例如,如果我们想从任何 RDBMS 中读取数据以将数据发布到主题并使用来自主题的数据并将其写入 RDBMS。使用连接器 API,我们可以为各种数据源创建可重用的源和接收器连接器组件。
Kafka 用于以下用例,
Kafka 用作企业消息系统,将源系统和目标系统解耦以交换数据。与 JMS 相比,Kafka 通过分区提供高吞吐量,通过复制提供容错能力。
跟踪网站上的用户旅程事件以进行分析和离线数据处理。
处理来自各种系统的日志。特别是在分布式环境中,具有微服务架构,其中系统部署在各种主机上。我们需要聚合来自各种系统的日志,并将日志放在一个集中的地方进行分析。阅读有关使用 Kafka 的分布式日志记录架构的文章 https://smarttechie.org/2017/07/31/distributed-logging-architecture-for-micro-services/
Kafka 用于从各种系统和网络收集指标以进行操作监控。有 Kafka metrics reporters 可用于监控工具,例如 Ganglia、Graphite 等……
关于这个 https://github.com/stealthly/metrics-kafka 的一些参考
Kafka 集群中的实例称为代理。在 Kafka 集群中,如果您连接到任何一个代理,您将能够访问整个集群。我们连接到访问集群的代理实例也称为引导服务器。每个代理都由集群中的数字 id 标识。从 Kafka 集群开始,三个代理是一个不错的数字。但是有些集群中有数百个代理。
主题是记录发布到的逻辑名称。在内部,主题被划分为数据发布到的分区。这些分区分布在集群中的代理上。例如,如果一个主题有 3 个分区,集群中有 3 个代理,每个代理有一个分区。发布到分区的数据仅附加偏移量增量。
以下是我们在使用分区时需要记住的两点。
在上面的示例中,我创建了一个包含三个分区且复制因子为 3 的主题。在这种情况下,由于集群有 3 个代理,因此三个分区均匀分布,每个分区的副本被复制到另外 2 个代理。由于复制因子为 3,因此即使 2 个代理宕机也不会丢失数据。始终保持复制因子大于 1 且小于或等于集群中的代理数。您不能创建复制因子超过集群中代理数量的主题。
在上图中,每个分区都有一个领导者(发光分区),其他同步副本(灰色分区)是跟随者。对于分区 0,broker-1 是领导者,broker-2、broker-3 是追随者。对分区 0 的所有读/写操作都将转到 broker-1,并将同样的内容复制到 broker-2 和 broker-3。
现在让我们按照以下步骤创建具有 3 个代理的 Kafka 集群。
下载 Apache Kafka 最新版本。在此示例中,我使用的是最新的 1.0。提取文件夹并移动到 bin 文件夹中。启动 Zookeeper,这是启动 Kafka 集群所必需的。 Zookeeper 是管理代理、分区领导者选举以及在主题(删除主题、创建主题等)或代理(添加代理、代理死亡等)更改期间提醒 Kafka 的协调服务。在这个例子中,我只启动了一个 Zookeeper 实例。在生产环境中,我们应该有更多的 Zookeeper 实例来管理故障转移。 没有 Zookeeper Kafka 集群就无法工作。
./zookeeper-server-start.sh ../config/zookeeper.properties
现在启动 Kafka 经纪人。在这个例子中,我们将启动三个代理。进入Kafka根目录下的config文件夹,复制server.properties文件3次,分别命名为server_1.properties、server_2.properties和server_3.properties。更改这些文件中的以下属性。
#####server_1.properties##### broker.id=1 listeners=PLAINTEXT://:9091 log.dirs=/tmp/kafka-logs-1 #####server_2.properties###### broker.id=2 listeners=PLAINTEXT://:9092 log.dirs=/tmp/kafka-logs-2 ######server_3.properties##### broker.id=3 listeners=PLAINTEXT://:9093 log.dirs=/tmp/kafka-logs-3M
现在使用以下命令运行 3 个代理。
###Start Broker 1 ####### ./kafka-server-start.sh ../config/server_1.properties ###Start Broker 2 ####### ./kafka-server-start.sh ../config/server_2.properties ###Start Broker 3 ####### ./kafka-server-start.sh ../config/server_3.properties
使用以下命令创建主题。
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic first_topic
使用 Kafka console producer 向在上述步骤中创建的主题生成一些消息。对于控制台生产者,请提及任何一个经纪人地址。这将是获得对整个集群的访问权限的引导服务器。
./kafka-console-producer.sh --broker-list localhost:9091 --topic first_topic >First message >Second message >Third message >Fourth message >
使用 Kafka 控制台消费者使用消息。对于 Kafka 消费者,提及任何一个代理地址作为引导服务器。请记住,在阅读消息时您可能看不到订单。因为顺序是在分区级别维护的,而不是在主题级别。
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first_topic --from-beginning
如果你愿意,你可以使用以下命令描述主题以查看分区的分布方式以及每个分区的领导者。
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic first_topic #### The Result for the above command##### Topic:first_topic PartitionCount:3 ReplicationFactor:3 Configs: Topic: first_topic Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Topic: first_topic Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Topic: first_topic Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
在上面的描述中,broker-1 是 partition:0 的领导者,broker-1、broker-2 和 broker-3 都有每个分区的副本。
在下一篇文章中,我们将看到生产者和消费者 JAVA API。到那时,Happy Messaging!!!
标签2: Java教程地址:https://www.cundage.com/article/jcg-introduction-apache-kafka.html