搜狗开源框架发布纯自研C++ Kafka客户端

搜狗开源框架发布纯自研C++ Kafka客户端

作者:佚名 2020-12-28 14:36:03

企业动态

Kafka 一个fetch消息的任务由一组任务组成,其中包括获取Kafka Broker的Meta任务、一系列的消费者组相关的任务、获取offset的任务和真正的拉取消息的任务。

   搜狗于今年7月发布了C++异步调度服务器引擎——Workflow,除了计算通信融为一体的高性能特点以外,还集成了多种常用的网络协议,包括:Http、Redis、MySQL,所有协议都是纯自研自解析,无需依赖第三方库,而具体协议所对应的资源复用和线程调度等都由Workflow以统一的方式去进行管理,目前获得了越来越多开发者的青睐和肯定。而最近,Workflow又支持并发布了一项复杂的通用网络协议:Kafka,使得所有使用Workflow及其生态项目的开发者都可以通过统一而简便的方式与Kafka交互,这也是业内唯一一款使用C++语言实现的Kafka客户端,值引得开源社区开发者们的关注。

  一、开发背景

  在Workflow发布Kafka客户端之前,业内用得比较多的是librdkafka,但这个纯C的kafka客户端有许多不足,以下是我们原先使用时遇到的部分问题:

  1、线程资源和网络资源消耗比较多

  2、接口设计比较复杂臃肿,使用成本比较高

  3、Kafka版本兼容性不是很好

  4、消耗资源高,但是性能却不高

  5、broker主从切换低版本出现服务hang住情况,高版本偶发丢数据问题

  6、异步同步偶发出现丢数据情况

  针对这些问题,更好的替代方案是Workflow的Kafka客户端:https://github.com/sogou/workflow

  由于实现在Workflow的基础上,作为Kafka客户端即具有超高性能、超大吞吐和极省的资源占用等特点,且和其他协议的接口一样,此Kafka客户端还具有接口清晰,代码可读性强等优点,不仅节省机器成本还节省人力维护成本,非常值得一试。

  二、新一代高性能C++ Kafka客户端

  Workflow的Kafka客户端使用接口非常简洁,首先需要创建一个client对象:

  

 

  其他使用方式与框架内的其他任务无异,使用Workflow的同学可以瞬间上手:

  

 

  为什么Workflow的Kafka客户端能有以上的优点呢?主要得益于以下三方面的细节:

  一. 内部基于Workflow的任务流实现。Workflow的核心设计理念是将任务抽象成”任务流”的概念,这样一个任意复杂的任务可以拆分成若干个并行任务流和串行任务流,它们之间通过串联、并联等方式组成一个或者多个串并联图,然后由Workflow内部的引擎高效异步地执行。

  以Kafka协议的fetch消息为例,下图是执行过程中任务流的串并联图:

  

 

  一个fetch消息的任务由一组任务组成,其中包括获取Kafka Broker的Meta任务、一系列的消费者组相关的任务、获取offset的任务和真正的拉取消息的任务。前面的多个任务由于有依赖关系,所以组成串联任务;而最终拉取消息的任务和Broker的个数有关,因此可以将它转换成一个broker数目相同的并行任务。这样做一方面可以使得逻辑很清晰,同时也可以保证执行的高效性。

  二. 连接复用。传统的网络通信往往是在程序初始化的时候,创建大规模连接池来提高网络吞吐,这么做的一个弊端是系统资源占用过多,会导致降低程序的鲁棒性。而目前这个Kafka客户端由于内部是基于Workflow框架,Workflow对连接的管理做了很多优化,可以在保证高效高吞吐的同时,将资源控制在一个合理的范围内。

  三.内存管理。为了方便用户的使用,内部的所有对象都基于计数实现,通过工厂方法创建任务后,在回调函数中实现处理逻辑即可。内存的分配和释放都是框架自动完成,全程无需手动操作任务级别的内存,非常方便;同时它的逻辑又是完备自洽的,保证了高效可靠。

  三、插件式发布,与Workflow完美融合

  基于Workflow精巧的层次结构,Kafka协议是以插件式发布的,即无需安装Kafka的用户不会把Kafka相关代码编译进去,由此可以看出Workflow本身的架构解耦和模块对称性都做得非常优秀。

  而Kafka的协议由于需要多次交互,Workflow复合任务又天生支持内部交互的隐藏,使得整体使用上对用户非常简洁透明。基于二级工厂模式也可以把许多全局信息统一管理到内存中,也是工程上结合的一大亮点。

  可以说,Kafka协议与Workflow的融合相当完美,且目前在搜狗已经大规模使用,经得住工业级检索系统大规模请求的实际考验,欢迎业内需要的开发同学积极尝试并与我们热心的开发小组进行技术交流。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/273080.html<

(0)
运维的头像运维
上一篇2025-05-09 02:44
下一篇 2025-05-09 02:45

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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