apache kafka_Apache Kafka简介

apache kafka

什么是Apache Kafka?

Apache Kafka是一个分布式流系统,具有发布和订阅记录流的功能。 在另一方面,它是企业消息传递系统。 它是一个快速,水平可扩展和容错的系统。 Kafka有四个核心API,

生产者API:

该API允许客户端连接到集群中运行的Kafka服务器,并将记录流发布到一个或多个Kafka主题。

使用者API:

该API允许客户端连接到集群中运行的Kafka服务器,并使用来自一个或多个Kafka主题的记录流。 卡夫卡的消费者是直接从卡夫卡主题的消息。

流API:

通过使用来自一个或多个主题的流并将这些流生成到其他输出主题,此API允许客户端充当流处理器。 这允许转换输入和输出流。

连接器API:

该API允许编写可重用的生产者和使用者代码。 例如,如果我们要从任何RDBMS读取数据以将数据发布到主题,并使用主题中的数据并将其写入RDBMS。 使用连接器API,我们可以为各种数据源创建可重用的源连接器和接收器连接器组件。

Kafka用于什么用例?

Kafka用于以下用例,

讯息系统:

Kafka用作企业消息传递系统,用于分离源系统和目标系统以交换数据。 与JMS相比,Kafka具有分区的高吞吐量和具有复制功能的容错能力。

网络活动跟踪:

跟踪网站上的用户旅程事件,以进行分析和脱机数据处理。

日志汇总:

处理来自各种系统的日志。 尤其是在具有微服务架构的分布式环境中,该系统将系统部署在各种主机上。 我们需要汇总来自各种系统的日志,并在中央位置提供日志以进行分析。 浏览有关使用Kafka的分布式日志记录体系结构的文章https://smarttechie.org/2017/07/31/distributed-logging-architecture-for-micro-services/

指标收集器:

Kafka用于从各种系统和网络收集指标以进行操作监视。 Kafka指标报告器可用于监控工具,例如Ganglia , Graphite等…

关于此https://github.com/stealthly/metrics-kafka的一些参考

什么是经纪人?

Kafka群集中的一个实例称为代理。 在Kafka群集中,如果您连接到任何一个代理,您将可以访问整个群集。 我们连接到访问群集的代理实例也称为引导服务器。 每个代理由集群中的数字ID标识。 首先从Kafka集群开始,三个经纪人是一个不错的选择。 但是有些集群中有数百个经纪人。

什么是主题?

主题是将记录发布到的逻辑名称。 在内部,该主题分为多个发布数据的分区。 这些分区分布在群集中的代理之间。 例如,如果一个主题有三个分区,群集中有3个代理,则每个代理都有一个分区。 要发布的分区数据仅附加偏移量增量。

以下是在使用分区时需要记住的几点。

  • 主题由其名称标识。 一个集群中可以有很多主题。
  • 消息的顺序保持在分区级别,而不是跨主题。
  • 一旦写入分区的数据不被覆盖。 这称为不变性。
  • 分区中的消息与键,值和时间戳一起存储。 Kafka确保将给定密钥的消息发布到同一分区。
  • 在Kafka群集中,每个分区都有一个领导者,该领导者将对该分区进行读/写操作。

在上面的示例中,我创建了一个主题,其中包含三个具有复制因子3的分区。在这种情况下,因为集群具有3个代理,所以这三个分区是均匀分布的,每个分区的副本都复制到另外2个代理中。 由于复制因子为3,因此即使有2个代理发生故障,也不会丢失数据。 始终保持复制因子大于1且小于或等于集群中的代理数目。 创建主题的复制因子不能超过集群中代理的数量。

在上图中,每个分区都有一个领导者(发光分区),其他同步副本(灰色分区)是跟随者。 对于分区0,broker-1是领导者,broker-2,broker-3是跟随者。 对分区0的所有读/写都将转到Broker-1,并且相同的内容将被复制到Broker-2和Broker-3。

现在,让我们按照以下步骤创建具有3个代理的Kafka集群。

第1步:

下载Apache Kafka最新版本。 在此示例中,我使用的是最新的1.0。 解压缩文件夹并移到bin文件夹。 启动Zookeeper,这对于从Kafka集群开始至关重要。 Zookeeper是协调服务,用于管理代理,对分区的领导者进行选举并在主题更改(删除主题,创建主题等)或代理(添加代理,代理模具等)更改期间向Kafka发出警报。 在此示例中,我仅启动了一个Zookeeper实例。 在生产环境中,我们应该有更多的Zookeeper实例来管理故障转移。 如果没有Zookeeper,Kafka群集将无法工作。

./zookeeper-server-start.sh ../config/zookeeper.properties

第2步:

现在启动卡夫卡经纪人。 在此示例中,我们将启动三个经纪人。 转到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

第4步:

通过使用Kafka控制台生产者,为上一步中创建的主题生成一些消息。 对于控制台生产商,请提及任何中间商地址。 这将是引导服务器,用于访问整个群集。

./kafka-console-producer.sh --broker-list localhost:9091 --topic first_topic
>First message
>Second message
>Third message
>Fourth message
>

步骤5:

使用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,3Topic: first_topic	Partition: 1	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1Topic: first_topic	Partition: 2	Leader: 3	Replicas: 3,1,2	Isr: 3,1,2

在上面的描述中,broker-1是分区:0的领导者,broker-1,broker-2和broker-3具有每个分区的副本。

在下一篇文章中,我们将看到生产者和消费者JAVA API。 直到那时, 快乐消息!!!

翻译自: https://www.javacodegeeks.com/2017/11/introduction-apache-kafka.html

apache kafka

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质

原文链接:https://www.cnblogs.com/arthinking/p/13205303.html相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如:避免 select *;join字段走索引;慎用in和not in,用exists取代in&a…

rest资源设计_REST资源何时应获得其自己的地址?

rest资源设计在纯粹的REST方法中,所有端点(起始端点除外)都是不透明的,因此不需要发布其各种详细信息。 即使使用这种方法,本文中的要点也很重要,因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体…

ckeditor回显带标签_Spring Boot中带有CKEditor的AJAX

ckeditor回显带标签1.概述 在本文中,我们将介绍如何在Spring Boot中使用CKEditor 。 在本教程中,我们将导入一个包含大量数据的XML文档,对使用GET请求将一组数据加载到CKEditor实例的能力进行编程,并执行POST请求以保存CKEditor的…

android 可行性分析,可行性研究项目分析程序与步骤

项目分析程序项目分析分析工作步骤分析程序框架分段实施方法第一阶段初期工作1、收集资料。包括业主的要求,业主已经完成的研究成果,市场、厂址、原料、能源、运输、维修、共用设施、环境、劳动力来源、资金来源、税务、设备材料价格、物价上涨率等有关资…

原码一位乘法器设计_十分钟带你彻底搞懂原码、反码、补码

点击上方“程序员大白”,选择“星标”公众号重磅干货,第一时间送达编辑 | 程序员大白公众号来源丨https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html仅作学术交流,如有侵权,请联系删文本篇文章讲解了计算…

Linux 目录之 /etc/init.d/ 介绍

文章目录一、关于目录 /etc/init.d/二、关于目录 /etc/rc.d/init.d/三、关于文件 /etc/rc.local四、/etc/init.d/ 和 service 文件五、关于命令 service六、关于文件 /etc/inittab七、关于目录 /etc/init/注意:以 System V init 或者 Upstart 为初始化系统的 Linux …

java 异常处理发生异常_处理Java中的异常

java 异常处理发生异常每个程序员都希望编写一个完美的程序。 也就是说,程序运行时没有任何障碍。 好吧,如果希望是马,乞g就会骑。 除了程序员的所有愿望之外,有时还会发生无法预料的情况。 在Java中,这些无法预料的…

android提交项目到svn,Android Studio 配置SVN,通过Share project提交项目和实现忽略文件...

1:首先电脑本身装的SVN必须在bin目录下包含svn.exe文件,如下图。这个文件是在安装SVN时选择安装command line client tools才会出现。如果没有,需要重新安装SVN。2:将SVN关联到Android Studio中声明:在这里我使用的And…

数独游戏技巧从入门到精通_如何引导孩子入门九宫格数独?掌握4个技巧口诀,孩子思维提升快...

九宫格数独对孩子的思维训练有着非常不错的效果,我们完全可以用其培养孩子对数字的兴趣,并培养孩子严谨的逻辑推理态度。那九宫格数独有没有技巧口诀呢?对于孩子来说,过于复杂的技巧他们也掌握不了。所以,我们培养孩子…

Spring Boot和Apache Camel

随着软件世界的发展,正在开发更加复杂的系统,这些系统必须相互集成。 它从SOA开始,然后一直到微服务。 骆驼是我想到的第一大集成工具,因为如今的骆驼springboot是一个非常强大的组合。 第一步是将骆驼依赖项包含到我们的sprin…

苹果android投屏,iphone怎么投屏到mac?苹果手机投屏到苹果电脑方法

iphone和mac的使用人群越来越多,其中投屏功能却难倒了大部分新手用户,许多使用iPhone以及Mac的用户朋友都还不知道iPhone怎么投屏到mac,好奇的用户朋友马上点击查看iphone投屏到mac教程来实现这个具有科技革新感的功能吧。官方推荐方法1:用数据线- 1.使用lightning线…

微服务java模块内存管理_Java 9模块服务

微服务java模块内存管理接线与查找 Java长期以来都有一个ServiceLoader类。 它是在1.6中引入的,但是自Java 1.2以来就使用了类似的技术。 一些软件组件使用了它,但是使用并不广泛。 它可以用于模块化应用程序(甚至更多)&#xff0…

使用实例工厂方法实例化_一些工厂实例

使用实例工厂方法实例化我时不时地发现自己摸索了一些旧代码,找到了“我在哪里做过类似工厂的事情”的示例。 上周再次发生这种情况时,我决定只查找所有示例,并创建一个示例项目和有关该示例的博客文章。 所以在这篇文章中,我&a…

linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构

1.Begins~有的人学习linux编程很久,只知道网络编程是socket,bind, listen。。。,然而这些都是网络通信软件最基本的接口。在某网络公司待了y,也了解到公司的基础就是网络转发 ,然而网络转发实现并非我们平时…

鸿蒙有安卓内核吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

命名对象实体对象_我的对象命名

命名对象实体对象这是最常见的辩论之一。 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的。 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助。 当我创建一个新类…

微信html人脸识别接口,微信人脸识别可视化的实现:

实现方式主要通过以下模块实现:DateFromWebChat (从网页版微信窗口下载好友头像)AI (识别模块,主要用于识别好友头像是否为人脸,并且计算人脸的数量与头像的总数且return)DateVisul (数据可视化模块,用与AI模块返回参数的可视化)u…

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景:对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章,主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架(angularjs,angular,jquery和react)的流行和流行的速度。 这篇文章的关键指标是每月关于…