03.Kafka 基本使用

        Kafka 提供了一系列脚本用于命令行来操作 kafka。

1 Topic 操作

1.1 创建 Topic

        创建一个名为 oldersix-topic 的 topic,副本数设置为3,分区数设置为2:

bin/kafka-topics.sh \
--create \
--zookeeper 192.168.31.162:2181 \
--replication-factor 3 \
--partitions 2 \
--topic oldersix-topic

1.2 查看下topic的情况

bin/kafka-topics.sh \
--describe \
--zookeeper 192.168.31.162:2181 \
--topic oldersix-topic

        我们来看下输出内容的解释,第一行是所有分区的概要信息,之后的每一行表示每一个partition的信息。

  • leader 节点负责给定 partition 的所有读写请求,同一个主题不同分区 leader 副本一般不一样(为了容灾)。
  • replicas 表示某个 partition 在哪几个 broker 上存在备份。不管这个几点是不是”leader“,甚至这个节点挂了,也会列出。
  • isr 是 replicas 的一个子集,它只列出当前还存活着的,并且已同步备份了该 partition 的节点。

2 生产消息 Producers

        Kafka 生产者将消息发送到 topic 中去,同时负责选择将 message 发送到 topic 的哪一个partition中。通过 round-robin 做简单的负载均衡。也可以根据消息中的某一个关键字来进行区分。通常第二种方式使用的更多。

        我们向新建的 oldersix-topic 中发送一些 message,kafka集群可以加上所有kafka节点

bin/kafka-console-producer.sh \
--broker-list 192.168.31.162:9092,192.168.31.162:9093,192.168.31.162:9094 \
--topic oldersix-topic

3 消费消息 Consumers

3.1 消费者组

        传统的消息传递模式有2种:队列( queue) 和(publish-subscribe)

  • queue模式:多个consumer从服务器中读取数据,消息只会到达一个consumer。
  • publish-subscribe模式:消息会被广播给所有的consumer。

        Kafka基于这2种模式提供了一种 consumer 的抽象概念:consumer group。

  • queue模式:所有的 consumer 都位于同一个consumer group 下。
  • publish-subscribe模式:所有的consumer都有着自己唯一的consumer group。

        上图说明:由2个broker组成的kafka集群,某个主题总共有4个partition(P0-P3),分别位于不同的broker上。这个集群由2个Consumer Group消费, Consumer Group A 有2个consumer instances ,Consumer Group B有4个。

        通常一个 topic 会有几个 Consumer Group ,每个 Consumer Group 都是一个逻辑上的订阅者( logical subscriber )。每个 Consumer Group 由多个 Consumer Instance 组成,从而达到可扩展和容灾的功能。

        同一 Partion 的一条消息只能被同一个 Consumer Group 内的一个 Consumer 消费,但多个Consumer Group可同时消费这一消息。

3.2 消费顺序

        一个 Partition 同一个时刻在一个 Consumer Group 中只能有一个 Consumer Instance 在消费,从而保证消费顺序。

        Consumer Group 中的 Consumer Instance 的数量不能比一个 Topic 中的 partition 的数量多,否则,多出来的consumer消费不到消息。

        Kafka 只在 Partition 的范围内保证消息消费的局部顺序性,不能在同一个 topic 中的多个partition中保证总的消费顺序性。

        如果有在总体上保证消费顺序的需求,那么我们可以通过将 topic 的 partition 数量设置为1,将consumer group中的consumer instance数量也设置为1,但是这样会影响性能,所以kafka的顺序消费很少用。 

3.3 Kafka 消费消息

bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.31.162:9092,192.168.31.162:9093,192.168.31.162:9094 \
--from-beginning --topic oldersix-topic

        可以看到,在消费端,我们已经消费到了 Producer 发送的消息。

4 Kafka 容错性

         Kafka 的 commit log 的 partitions 分布在 kafka 集群中不同的 broker 上,每个 broker 都可以请求备份其他 broker 上 partition 上的数据。kafka 集群支持配置一个 partition 备份的数量。

        针对每个 partition,都有一个 broker 起到 “leader” 角色作用,0 个或多个其他的 broker 作为“follwers”角色的作用。leader 处理所有的针对这个 partition 的读写请求,而 followers 被动复制 leader 的结果,不提供读写(主要是为了保证多副本数据与消费的一致性)。如果这个 leader 失效了,其中的一个 follower 将会自动的变成新的leader。

        现在我们来测试我们容错性,因为 broker1目前是 oldersix-topic 的分区 0 的leader,所以我们要将其kill。

# 查看 broker 1 进程号
ps -ef | grep server.properties
# kill 进程
kill 2346

             可以看到 zookeeepr 的节点中已经没有 broker1 了。

        现在再执行命令:

bin/kafka-topics.sh \
--describe --zookeeper 192.168.31.162:2181 \
--topic oldersix-topic

        我们可以看到,分区 0 的 leader 节点已经变成了broker 2。要注意的是,在 Isr 中,已经没有了 1 号 broker 节点。leader的选举也是从ISR(in-sync replica)中进行的

        此时,我们依然可以 消费新消息:

bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.31.162:9092,192.168.31.162:9093,192.168.31.162:9094 \
--from-beginning --topic oldersix-topic

        查看主题分区对应的 leader 信息:

get /brokers/topics/oldersix-topic/partitions/1/state

        kafka 将很多集群关键信息记录在 zookeeper 里,保证自己的无状态,从而在水平扩容时非常方便。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS1快速入门学习笔记 - 07话题消息的定义与使用

目录 一、话题模型 二、自定义话题消息 1. 在功能包下创建msg目录用于存储话题文件 2. 在package.xml文件中添加功能包依赖; 3. 在CMakeLists.txt增加编译选项; 4. 完成编译 5. 配置CMakeLists.txt中的编译规则(增加发布者和订阅者&am…

卫浴品牌商家做展示预约小程序的作用是什么

卫浴品牌类别多、普通/智能、场景化等,无论企业还是经销商市场门店都比较饱满,虽然市场需求度高,但同样需要商家不断拓宽销售渠道和挖掘客户价值,破圈增长。 线上多平台发展尤为重要,而小程序作为连接点,对…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中,反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…

就业班 第三阶段(nginx) 2401--4.26 day5 nginx5 nginx https部署实战

三、HTTPS 基本原理 1、https 介绍 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。 近些年&…

ArcGIS小技巧—模型构建器快速提取河网

上篇文章介绍的基于DEM的河网提取,需要使用多个工具,整体操作比较繁琐,在日常工作中,使用Arcgis提供的模型构建器可以帮助我们将多个工具整合在一起,在面对大量数据批量处理时,可以大大提高工作效率 利用模…

【题解】—— LeetCode一周小结17

【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结16 22.组合总和 Ⅳ 题目链接:377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数…

基于SSM的“个性化电子相册”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“个性化电子相册”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 个性化电子相册功能结构图 系统后台界面 会员信息管理界面 相…

在网站源码后台增加响应式布局

一本教材上的网站源码,后台在手机上查看还是按照电脑的页面样式,不方便查看和发布新内容。教材上讲了响应式布局。对于页面结构简单的网站,可以利用响应式,使页面自动适用各种屏幕的分辨率。 今天在一个网站源码的后台使用了响应…

经典案例:学习 Java 异常处理的最佳实践

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

OpenCV如何模板匹配

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何实现背投 下一篇 :OpenCV在图像中寻找轮廓 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 matchTemplate()搜索图像贴片和输入图像之间…

为什么我的Mac运行速度变慢 mac运行速度慢怎么办 如何使用CleanMyMac X修复它

近些年伴随着苹果生态的蓬勃发展,越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现,它的使用逻辑与Windows存在很多不同,而且随着使用时间的增加,一些奇奇怪怪的文件也会占据有限的磁盘空间,进而影响使用…

电脑已经有了一个Windows10,再多装一个Windows10组成双系统

前言 前段时间已经讲过一次双Windows系统的安装教程,但是小白重新去看了一下,发现写的内容太多,怕小伙伴看了之后一脸萌。 所以今天咱们就重新再来讲讲:在同一台机器上安装Windows10双系统的教程。 注意哦!这里的Wi…

用来传输文件的协议-FTP

一.FTP协议--文件传输协议 1.了解FTP协议 (1)FTP服务是用来传输文件的协议 FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一,用于互联网上的控制文件的双向传输。是传输文件到Linu…

C++:string 类

在C中定义一个 std::string 字符串可以采用以下几种方式: 1.使用字符串字面量初始化: std::string str "Hello, world!"; 2.使用构造函数初始化: std::string szStringB("Hello wolven"); 3.使用重复字符初始化&am…

51单片机入门(一)

1. 51单片机的基础介绍 2. RAM和ROM的区别 总体而言,RAM和ROM在计算机系统中起着不同的角色,RAM用于临时存储运行时数据,而ROM用于存储永久性的固件和系统程序。 3. 为什么叫51单片机 因为51系列单片机都是使用Intel 8031指令系统的单片机…

【链表——数据结构】

文章目录 1.单链表1.定义2.基本操作2.1.不带头结点2.2后插2.3前插2.4删除2.5按位查找2.6按值查找2.7求单链表长度2.8 建表 2.双链表1.初始化2.插入(后插)3.删除(后删)4.遍历 3.循环链表1.循环单链表2.循环双链表3.代码问题 4.静态链表1.简述基本操作的实现1.初始化3.删除某个结…

前端---Bootstrap---的下载和使用

目录 Bootstrap的下载 网页链接: 下载步骤: Bootstrap的使用 引用步骤: Bootstrap常用: Bootstrap-栅格系统 Bootstrap-组件 Bootstrap 是由 Twiter 公司开发维护的前端 U框架,它提供了大量编写好的 CSS 样式,允许开发者结合一定 HTML结构及JavaS…

二维码门楼牌管理应用平台建设:档案管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的构建背景二、九小场所档案管理的重要性三、二维码门楼牌管理应用平台在九小场所档案管理中的应用四、二维码门楼牌管理应用平台的优势与挑战五、结语 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台的建设已成…

《Fundamentals of Power Electronics》——三端电池的旋转、负载差分连接

以下是关于三端电池的旋转的相关知识点: Buck电路、Boost电路和Buck-Boost电路均包含一个与单刀单掷开关相连的电感。如下图所示。 将上图中的电感和开关网络视为一个标有a,b,c三端的基础电池。该电池在电源和负载之间有三种不同的连接方式。a-A b-B c-C连接方式组…

BERT一个蛋白质-季军-英特尔创新大师杯冷冻电镜蛋白质结构建模大赛-paipai

关联比赛: “创新大师杯”冷冻电镜蛋白质结构建模大赛 解决方案 团队介绍 paipai队、取自 PAIN AI,核心成员如我本人IvanaXu(IvanaXu GitHub),从事于金融科技业,面向银行信用贷款的风控、运营场景。但我们团队先后打过很多比赛&#xf…
最新文章