位置: IT常识 - 正文

kafka详解(一)--kafka是什么及怎么用(kafka gui)

编辑:rootadmin
我准备开一个新的系列,希望可以帮助大家更简单、更连贯、更系统地了解 kafka。这是系列的第一篇,主要讲kafka是什么?如何使用kafka。 ... kafka是什么

推荐整理分享kafka详解(一)--kafka是什么及怎么用(kafka gui),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:kafka详细介绍,kafka详细介绍,kafka the definitive guide,kafka详细介绍,kafka gui,kafka用法,kafka 详解,kafka介绍以及使用,内容如对您有帮助,希望把文章链接给更多的朋友!

在回答这个问题之前,我们需要先了解另一个东西--event streaming。

什么是event streaming

我觉得,event streaming 是一个动态的概念,它描述了一个个 event ( "something happened" in the world ) 在不同主体间连续地、正确地流动的状态。(这里我想搞个动图的,不过 plantuml 不支持,所以只能靠想象了。。)

event source 产生 event,event source 可以是数据库、传感器、移动设备、应用程序,等等。

event broker 持久化 event,以备 event sink 可以随时获取它们。

event sink 实时或回顾性地从 broker 中获取 event 进行处理。

有的人可能会问,为什么需要 broker,event 从 source 直接流到 sink 不行吗?当然可以,但是不够解耦,要么 event source 需要事先知道谁需要这些 event,要么 event sink 需要知道 event 从哪里来。

现在,我们可以在脑子里想象出 event streaming 的样子:event 由 source 产生,然后流向 broker,在 broker 被持久化,再流到 sink。并不复杂对吧?

event streaming用来干嘛

我们可以在很多的应用场景中找到 event streaming 的身影,例如:

实时处理支付、金融交易、客户订单等等;

实时跟踪和监控物流进度;

持续捕获和分析来自物联网设备或其他设备的传感器数据;

不同数据源的数据连接;

作为数据平台、事件驱动架构和微服务等的技术基础;

等等。

kafka是什么

现在我们回过头来回答问题:kafka 是什么?

我认为,如果说 event streaming 是一种规范的话,那么 kafka 就是 event streaming 的一种具体实现。

kafka的架构概念视图

从最上层的抽象看,kafka 由三个部分组成:

其中,producer 发布 event,broker 持久化 even,consumer 订阅 event。其中,producer 和 consumer 完全解耦,互不知晓。

不过,这是概念视图,不是物理视图。具体实现会因为 source 或 sink 的不同而有所不同。

物理视图Producer/Consumer API

当 event source 为普通应用程序时,可以在程序中引入 Producer API 和 Consumer API 来完成与 broker 的交互。这些 API 涵盖了大部分主流语言,例如 Java、Scala、Go、Python、C/C++,除此之外,我们也可以直接使用 REST API 调用。

Connector

但是,并不是所有 source 或 sink 都能使用 API 的方式,例如,实时捕获数据库的更改、文件的更改,从 RabbitMQ 导入导出消息,等等。

这个时候就需要使用 connector 来完成集成。通常情况下,connector 并不需要我们自己开发,kafka 社区为我们提供了大量的 connector 来满足我们的使用需求。

topic&partition

接下来我们再来补充下 broker 的一些细节。//zzs001

通常情况下,我们的 broker 会接收到很多不同类型的 event ,broker 需要区分它们,以便正确地路由。topic 就发挥了作用,它有点类似文件系统的目录,而 event 就类似于目录里的文件,sink 想要什么 event,只要找到对应的 topic 就行了。

同一 topic 可以有零个或多个 producer 和 consumer,不同于传统 MQ,kafka 的 event 消费后并不删除,为什么这么做呢?这个我们后续的博客会说的。

除此之外,一个 topic 会划分成一个或多个 partition,这些 partition 一般分布在不同的 broker 实例。producer 发布的 event 会根据某种策略分配到不同的 partition,这样做的好处是,consumer 可以同时从多台 broker 读取 event,从而大大提高吞吐量。另外,为了高可用,同一个 partition 还会有多个副本,它们分布在不同的 broker 实例。

需要注意一下,当同一 topic 的 event 被分发到多个 partition 时,写入和读取的顺序就不能保证了,对于需要严格控制顺序的 topic,partition 需要设置为 1。

Streams

kafka 那么受欢迎,还有一个很重要的原因,就是它提供了流式处理类库,支持对存储于Kafka内的数据进行流式处理和分析。这部分内容,我也是刚入门而已,后续博客再好好研究。

如何使用kafka环境说明

kafka:3.2.1

os:CentOS Linux release 8.3.2011

JDK:1.8.0_291

注意,kafka 3.2.1 要求本地环境安装 Java 8 及以上版本

下载安装

从 下载页面下载安装包。

解压安装包。

tar -xzf kafka_2.13-3.2.1.tgz启动brokerkafka详解(一)--kafka是什么及怎么用(kafka gui)

进入到解压目录,我们看看 kafka 的目录结构。

cd kafka_2.13-3.2.1ls -al

接下来,我们启动 broker 的部分,需要按照顺序依次启动 zookeeper 和 kafka server。

先启动 zookeeper(后续版本可能不再需要 zookeeper)。

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

打开另一个会话,再启动 kafka server。

bin/kafka-server-start.sh config/server.properties

现在,单机版 broker 已经就绪,我们可以开始使用了。

创建topic

producer 发布的 event 会持久化在对应的 topic 中,才能路由给正确的 consumer。所以,在读写 event 之前,我们需要先创建 topic。

打开另一个会话,执行以下命令。

# 创建topic zzs001bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092# 查询topic bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

简单的读写event

接下来我们用 kafka 自带的 console-consumer 和 console-producer 读写 event。

使用 console-producer 写 event 时,我们每输入一行并回车,就会向 topic 写入一个 event。

bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092

写完之后我们可以按 Ctrl + C 退出。

接着,我们使用 console-consumer 读 event。可以看到,刚写的 event 被读到了。

bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092

读完我们按 Ctrl + C 退出。

我们可以在两个会话中保持 producer 和 consumer 不退出,当我们在 producer 写入 event 时, consumer 将实时读取到。

前面提到过,topic 的 event 会被持久化下来,而且被消费过的 event 并不会删除。这一点很容易验证,我们可以再开一个 consumer 来读取,它还是能读到被别人读过的 event。

使用connect导入导出

前面提到过,有的 source 或 sink 需要依赖 connector 来读写 event,接下来我们以文件为例,演示如何从已有文件中将 event 导入 topic,并从 topic 中导出到另一个文件中。

首先我们需要一个可以导入导出文件的 connector,默认情况下,在 kafka 的 libs 目录就有这样一个 jar 包--connect-file-3.2.1.jar。我们需要在 connect 的配置中引入这个包。

vi config/connect-standalone.properties

按 i 进入编辑,添加或修改plugin.path=libs/connect-file-3.2.1.jar。

按 ESC 后输入 :wq 保存并退出。除此之外,这个文件还可以用来配置需要连接哪个 broker,以及 event 的序列化方式等。

然后,我们创建一个 test.txt 作为 event source,并写入 event。

echo -e "foo\nbar" > test.txt

现在我们先启动 event source 的 connector,将 test.txt 的 event 写入名为 connect-test 的 topic。config/connect-file-source.properties 已经配置好了connector 名称、event source 的文件、topic,等等。

bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties

执行片刻后我们可以按 Ctrl + C 退出。

这时,我们可以先通过 consumer-console 查看 topic 上是否有这些 event。可以看到,event 已经成功导入,至于格式为什么是这样的,这个以后再说明。

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning

现在我们启动 event sink 的 connector,将 topic 的 event 导入到 test.sink.txt。connect-file-sink.properties 已经配置好了connector 名称、event source 的文件、topic,等等 。

bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-sink.properties

执行片刻后我们可以按 Ctrl + C 退出。

这时查看 test.sink.txt,可以看到 event 成功导出。

和前面一样,这里我们也可以保持 event source 和 event sink 的 connector 不退出,测试实时生产和消费 event。

使用streams处理

这部分内容后续再补充。

停止

走到这一步,我们已经完成了 kafka 的入门学习。

接下来,我们可以通过以下步骤关闭 kafka。

如果 producer 或 consumer 还在运行,Ctrl + C 退出;

Ctrl + C 退出 kafka server;

Ctrl + C 退出 zookeeper;

如果想清除 kafka 的数据,包括我们创建的 topic 和 event、日志等,执行以下命令:

rm -rf /tmp/kafka-logs /tmp/zookeeper /tmp/connect.offsets结语

以上内容是最近学习 kafka 的一些思考和总结(主要参考官方文档),如有错误,欢迎指正。

任何的事物,都可以被更简单、更连贯、更系统地了解。希望我的文章能够帮到你。

最后,感谢阅读。

参考资料

Apache Kafka 官方文档

相关源码请移步:https://github.com/ZhangZiSheng001/kafka-demo

本文为原创文章,转载请附上原文出处链接:https://www.cnblogs.com/ZhangZiSheng001/p/16641755.html

本文链接地址:https://www.jiuchutong.com/zhishi/309289.html 转载请保留说明!

上一篇:PHPCMS 专题模块怎么使用?(phpcms教程)

下一篇:python zipfile模块的文件操作(python3 zipfile模块)

  • 真我GT2大师探索版支持无线充电吗

    真我GT2大师探索版支持无线充电吗

  • 支付宝开通花呗需要什么条件(支付宝开通花呗收款为什么别人扫不了)

    支付宝开通花呗需要什么条件(支付宝开通花呗收款为什么别人扫不了)

  • qq的小世界怎么关闭(qq的小世界怎么永久删除)

    qq的小世界怎么关闭(qq的小世界怎么永久删除)

  • 安卓录音文件在哪个文件夹(安卓怎么录音)

    安卓录音文件在哪个文件夹(安卓怎么录音)

  • 设置飞行模式后打入电话会如何(设置飞行模式后还可以连无线网吗)

    设置飞行模式后打入电话会如何(设置飞行模式后还可以连无线网吗)

  • 京东二维码付款怎么弄(京东二维码付款他能看到是谁发的吗)

    京东二维码付款怎么弄(京东二维码付款他能看到是谁发的吗)

  • 耳机左耳比右耳声音大(耳机左耳比右耳耗电快)

    耳机左耳比右耳声音大(耳机左耳比右耳耗电快)

  • mp288显示e03通病

    mp288显示e03通病

  • 平台检测到近期退款行为异常(平台检测到近期异常)

    平台检测到近期退款行为异常(平台检测到近期异常)

  • 微博上铁粉怎么获得(微博铁粉怎么恢复)

    微博上铁粉怎么获得(微博铁粉怎么恢复)

  • 抖音申诉没有通过怎么办(抖音申诉没有通过)

    抖音申诉没有通过怎么办(抖音申诉没有通过)

  • 怎样解决空调上热下冷(怎样解决空调上的h1)

    怎样解决空调上热下冷(怎样解决空调上的h1)

  • iphone6能更新ios13(iPhone6能更新到)

    iphone6能更新ios13(iPhone6能更新到)

  • 朋友权限仅聊天对方知道吗(朋友权限仅聊天怎么取消)

    朋友权限仅聊天对方知道吗(朋友权限仅聊天怎么取消)

  • 手机收藏占内存吗(手机收藏占内存空间吗)

    手机收藏占内存吗(手机收藏占内存空间吗)

  • 收藏加购卖家能看到吗(收藏跟加购会给店铺长权重吗)

    收藏加购卖家能看到吗(收藏跟加购会给店铺长权重吗)

  • 微信投诉群群主可以看见吗(微信投诉群群主会怎么样)

    微信投诉群群主可以看见吗(微信投诉群群主会怎么样)

  • 快手动态怎样全删除(这么设置快手动态)

    快手动态怎样全删除(这么设置快手动态)

  • 喜马拉雅电脑版怎么下载(喜马拉雅电脑版怎么找到创作中心)

    喜马拉雅电脑版怎么下载(喜马拉雅电脑版怎么找到创作中心)

  • 京东评价管理在哪里(京东的评价系统)

    京东评价管理在哪里(京东的评价系统)

  • 大众点评d币在哪里找(大众点评dq)

    大众点评d币在哪里找(大众点评dq)

  • 苹果x无线耳机怎么连接(苹果X无线耳机怎么用)

    苹果x无线耳机怎么连接(苹果X无线耳机怎么用)

  • 为什么电脑自动改时间(为什么电脑自动安装乱七八糟的软件)

    为什么电脑自动改时间(为什么电脑自动安装乱七八糟的软件)

  • 什么是渲染(什么是渲染的表现手法)

    什么是渲染(什么是渲染的表现手法)

  • qq搜索好友有记录吗(qq搜索好友记录能保持多久)

    qq搜索好友有记录吗(qq搜索好友记录能保持多久)

  • apple watch2和3的区别(apple watch 2和3有什么区别)

    apple watch2和3的区别(apple watch 2和3有什么区别)

  • 面对面建群在哪(面对面建群在哪里找)

    面对面建群在哪(面对面建群在哪里找)

  • windows系统进程终止方法详解(window10进程)

    windows系统进程终止方法详解(window10进程)

  • phpcms v9搬家不同步怎么办

    phpcms v9搬家不同步怎么办

  • 小规模纳税人所得税优惠政策2023
  • 研发辅助账科目设置
  • 预收款方式销售货物
  • 财务软件怎么结转本年利润
  • 辞退福利是指
  • 建筑行业增值税税负率一般控制在多少合适
  • 税费滞纳金计入增值税吗
  • 个人提供劳务给个人,不开票要缴税吗
  • 销项抵扣需要缴纳城建税吗
  • 单位表彰性奖金是什么
  • 委托收款背书和转让背书
  • 出售未完成折旧固定资产进项税转出
  • 财产租赁所得个人所得税计算方法2020
  • 水利事业单位基建并账分录怎么写?
  • 自然人税收管理系统扣缴客户端app
  • 税金及附加期末结转分录
  • 餐厨垃圾处理有哪些设备
  • 出口退税申报里汇率计算方式选择
  • 国税增值税定额计算公式
  • 积分兑换步骤
  • linux 卸载vmware
  • win11 insider preview怎么升级正式版
  • 局域网游戏电脑
  • 2021新旧会计准则
  • 内部员工租房租金合法吗
  • PHP:oci_free_descriptor()的用法_Oracle函数
  • PHP:pg_fetch_assoc()的用法_PostgreSQL函数
  • 北极熊睡觉图片卡通
  • 境外租赁要交什么税
  • 阿根廷圣克鲁斯省
  • framework7教程
  • 应收账款确认无法收回
  • vue3 原理
  • h5项目怎么打包成app
  • 路由vue-router
  • 实现自己的http server loop_in_codes C++博客
  • python中for循环的缩进规则
  • 未确认融资费用账务处理
  • 季度销售额未超过30万元 季度中间
  • 厂房转租会计分录
  • 注册资本印花税最新政策2023年
  • 利息应怎么录入收入
  • 工会经费上缴流程
  • 实收资本变化
  • 公司支付宝账户怎么管理
  • 企业与企业之间通过互联网进行产品
  • 税务局多扣的税可以退吗
  • 政府补助的房子叫什么
  • 刻章费用怎么说
  • 举办活动的工作要求
  • 公司购买防疫物资的申请
  • 职工薪酬一般计入哪些科目进行核算
  • 用友有审核权限审核不了
  • 营改增之后账务怎么处理
  • 出口汇率按报关价格算吗
  • 红字发票是干什么的
  • 事业单位收费可以收取相关服务费吗
  • 销项税小于进项税怎么结转
  • 主营业务收入包括哪些内容
  • 海关发票丢失怎么处理
  • mysqldump -w
  • win10下mysql 5.7.17 zip压缩包版安装教程
  • 如何去掉macbook开机密码
  • shell 写入文本
  • 显示隐藏文件也看不到
  • linux vs windows
  • 怎么创建windows虚拟机
  • win8创建系统映像
  • win8删文件需要权限怎么弄
  • linux小技巧
  • android RecycleView 面试
  • 如何旋转图片30度
  • 利用用英文怎么翻译
  • jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
  • 上海房屋出租交税
  • 苏州税务中心
  • 南京国民政府统治和开辟革命新道路
  • 企业少缴社保怎么补偿
  • 国,地税纳税申报表是什么
  • 西安税务局服务电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设