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,一经查实,立即删除!

相关文章

Mac OS 查看系统版本信息/硬件信息的命令

文章目录一、查看硬盘信息二、查看系统内核信息三、查看 OS 版本信息一、查看硬盘信息 liaowenxiongdeMacBook-Air:~ liaowenxiong$ system_profiler SPHardwareDataType Hardware:Hardware Overview:Model Name: MacBook AirModel Identifier: MacBookAir7,2Processor Name: …

人脸特征值能存放在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体…

百度地图android绘图类,Class:android总类/android离线地图类

出自百度地图API跳转到:导航,搜索com.baidu.mapapi类 MKOfflineMapjava.lang.Object∟ com.baidu.mapapi.MKOfflineMappublic class MKOfflineMapextends java.lang.Object离线地图类(只支持老版离线地图)。字段摘要方法摘要返回类型方法booleanstart(int cityID)启…

android webviwe 头布局,Android布局问题,带有WebView下方的按钮

您需要使用android:layout_above“id/btnok”作为您的webview,并填写_parent作为webview的宽度和高度。但是,需要注意的是,在1.5及以下版本中,为了正确识别XML,需要指定相对布局视图。换句话说,您必须先使用按钮,然后使用WebView,因为WebView将引用该按钮。我认为这在1.6或2.0中…

简述python的编程规范_python编程规范

一 代码风格:(0)参考google代码规范:*链接:http://zh-google-styleguide.readthedocs.org/en/latest/google-python-styleguide/(1)缩进:*python通过缩进对齐来表达代码逻辑:同一层次的语句必须有相同的缩进&#xff0…

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仅作学术交流,如有侵权,请联系删文本篇文章讲解了计算…

enumset_枚举集合的EnumSet

enumset在上一篇博客文章中,我们发现了EnumMap用于带有枚举键的映射。 您可能已经观察到,还有一个专门针对枚举优化的Set : EnumSet 。 我们再次定义一个CoffeeType枚举: public enum CoffeeType {ESPRESSO, POUR_OVER, FRENCH_…

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 …

c语言行列式源代码,新手作品:行列式计算C语言版

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼对话 ControlHeightDecrease ShiftUp Arrow 向上调整选定的控件或对话一个对话单位对话 ControlHeightIncrease ShiftDown Arrow 向下调整选定的控件或对话一个对话单位对话 ControlMoveDown Dow…

RPM 软件包名中的 el5、el6、el7 是什么?

EL 是 Red Hat Enterprise Linux 的简写。 EL6 表示软件包可以在 Red Hat 6.x,CentOS 6.x,CloudLinux 6.x 进行安装EL5 表示软件包可以在 Red Hat 5.x,CentOS 5.x,CloudLinux 5.x 进行安装EL7 表示软件包可以在 Red Hat 7.x&…

pbc是什么材料_职道漫谈 | 华为的绩效跟你们公司的绩效,有什么区别?

文 | 沈齐雨作者赐稿授权发布,供朋友圈转发分享!欢迎投稿:3069462510qq.com相信现在随便问几个公司员工:你们公司的绩效运行的怎么样?得到的答案大多会是:“完全就是摆设。”“没用不说,还特别浪…

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…

数据库 MySQL 如何设置表的主键自增起始值

文章目录表已有数据,truncate 之后再设置 auto_increment,可行表已有数据,delete from 之后再设置 auto_increment,可行主键自增起始值重置查询表名为 tf_user 的 auto_increment 值创建表时设置 AUTO_INCREMENT 参数表已有数据&a…

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

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

Spring Boot和Apache Camel

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