关于kafuka的简单认识与理解「建议收藏」

关于kafuka的简单认识与理解「建议收藏」因为工作中负责维护的产品中有使用消息中间件kafuka的系统,所以把工作中的理解和遇到的问题总结出来,方便后期查看,好记性不如烂笔头。kafuka是一个分布式的、分区化、可复制提交的发布订阅消息系统,使用kafuka需要对其中的一些概念做简单了解。一、kafuka基础1、topic主题:Kafka中用于区分不同类别信息的类别名称。由producer指定2、Producer:将消息发布到Kafka特定的Topic的对象3、Consumers:订阅并处理特定的Topic中的消息的对象4、broke

大家好,又见面了,我是你们的朋友全栈君。

因为工作中负责维护的产品中有使用消息中间件kafuka的系统 ,所以把工作中的理解和遇到的问题总结出来,方便后期查看,好记性不如烂笔头。kafuka是一个分布式的、分区化、可复制提交的发布订阅消息系统,使用kafuka需要对其中的一些概念做简单了解。
一、kafuka基础
1、topic主题: Kafka中用于区分不同类别信息的类别名称。由producer指定
2、Producer:将消息发布到Kafka特定的Topic的对象
3、Consumers:订阅并处理特定的Topic中的消息的对象
4、broker(Kafka服务集群):已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息,通俗的说broker就是一台服务器,一个节点。
5、Message:消息,是通信的基本单位,每个producer可以向一个topic(主题)发送一些消息。
6、 Partition(分区): Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)

分区具体在服务器上面表现起初就是一个目录,一个主题下面有多个分区,这些分区会存储到不同的服务器上面,或者说,其实就是在不同的主机上建了不同的目录。多个分区多个线程,多个线程并行处理提高性能,其中中topic主题只是逻辑概念,而partition就是分布式存储单元,这个设计是保证了海量数据处理的基础。
在这里插入图片描述

二、kafuka集群架构
创建一个TopicA的主题,3个分区分别存储在不同的服务器,也就是broker下面。Topic是一个逻辑上的概念,并不能直接在图中把Topic的相关单元画出
在这里插入图片描述

需要注意:kafka在0.8版本以前是没有副本机制的,所以在面对服务器宕机的突发情况时会丢失数据,所以尽量避免使用这个版本之前的kafka

Consumer Group – 消费者组
​我们在消费数据时会在代码里面指定一个group.id,这个id代表的是消费组的名字,而且这个group.id就算不设置,系统也会默认设置: conf.setProperty(“group.id”,“chenqi”);

consumerA: group.id = a
consumerB: group.id = a
consumerC: group.id = b
consumerD: group.id = b
对于消费者组,如现在consumerA去消费了一个topicA里面的数据,再让consumerB也去消费TopicA的数据,它是消费不到了,但是我们在consumerC中重新指定一个另外的group.id,consumerC是可以消费到topicA的数据的。而consumerD也是消费不到的,所以 在kafka中,不同组可有唯一的一个消费者去消费同一主题的数据。 所以消费者组就是让多个消费者并行消费信息而存在的,而且它们不会消费到同一个消息
在这里插入图片描述

 消费者会直接和leader建立联系,所以它们分别消费了三个leader,所以 一个分区不会让消费者组里面的多个消费者去消费 ,但是在消费者不饱和的情况下, 一个消费者是可以去消费多个分区的数据的 。

三、结合实际问题
实际工作中使用的kafuka集群是四个分区,一个消费者组,但是消费者有四台主机,因为业务量的扩大需要将消费者增加到8个,但是在新主机测试的时候发现,老主机是可以接受到kafuka的消息的,但是新主机接收不到kafuka的消息,如果将老主机进程停止,新主机从新启动,后启动的四台主机是由kafuka消息的,而先启动的就接收不到消息,结合上面的分析,不难看出,是因为分区数小于了当前的消费者组内的消费者数量, 同一个消费组内,消费者数目大于分区数目后,消费者会有空余=分区数-消费者数,所以有四台主机无法接收消息,此时需要结合kafuka的性能去增加分区数,最好是分区数=消费者数,此时效率最高。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131717.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • voliate关键字原理

    voliate关键字原理被volatile修饰的变量在编译成字节码文件时会多个lock指令,该指令在执行过程中会生成相应的内存屏障,以此来解决可见性跟重排序的问题。voliate关键字作用静止重排序保证变量赋值操作的顺序与程序代码中的执行顺序一致。线程可见性原理使用场景…

    2022年5月2日
    58
  • Oracle11G完全卸载步骤

    Oracle11G完全卸载步骤完全卸载oracle11g步骤:1、开始->设置->控制面板->管理工具->服务,停止所有Oracle服务。2、开始->程序->Oracle_OraDB11g_Home1->OracleInstallationProducts->UniversalInstaller,单击“卸载产品”-“全部展开”,选中除“OraDb11g_home1”外的全部目录,删除。5、运行reg…

    2022年5月13日
    37
  • web界面设计工具_21个用于Web设计师的生产力工具,可提高他们的设计技能「建议收藏」

    web界面设计工具_21个用于Web设计师的生产力工具,可提高他们的设计技能「建议收藏」web界面设计工具Thegreatthingaboutlivinginourtimeistheadvancementsoftechnology,andwiththatcomestheadvancementsofmoderntechnologyaswell.Therearenumerousprograms,whicharenowavail…

    2022年6月18日
    26
  • linux命令_linux挂载cifs报错

    linux命令_linux挂载cifs报错[pcd@localhostax_peta]$petalinux-config–get-hw-description../SG400_top_hw_platform_1INFO:Gettinghardwaredescription…cp:omittingdirectory‘/home/pcd/peta_prj/SG400_top_hw_platform_1/cache…

    2025年10月29日
    5
  • java 常量接口

    java 常量接口接口当中也可以定义 成员变量 但是必须使用 publicstatic 三个关键字进行修饰 从效果上看 这其实就是接口的 常用 格式 publicstatic 数据类型常量名称 数据值 接口当中的常量 可以省略 publicstatic 接口中的常量 必须进行赋值 接口中常量的名称 使用大写的字母 publicinterf public

    2025年10月8日
    5
  • linux系统添加审计用户并进行权限控制「建议收藏」

    linux系统添加审计用户并进行权限控制「建议收藏」审计账号只用于审计功能,其权限可在普通账号基础上进行修改1) 创建审计账号shenji[root@localhost~]#useraddshenji[root@localhost~]#passwdshenji2) 修改审计账号权限使其只具有查看功能[root@localhost~]#setfacl-mu:shenji:rx/*此命令是添加acl权限控制,效果…

    2022年5月25日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号