# Kafka组件化及拓展

1.Kafka

Kafka是一个开源的分布式事件流处理平台。主要用于构建实时数据管道和流处理应用程序,广泛用于日志采集。Kafka具有高吞吐量、高可用性、持久化存储、可拓展性等特点。因为公司项目中消息中间件都是用的Kafka,而且也发现在使用时有一些亮点和设计,所以想展开整理记录下,希望给有想使用Kafka作为中间件的朋友一些帮助。

2.Kafka怎么保证消息的可靠性

这里讲的可靠性主要是针对发布时的可靠性,这也是消息可靠性(发布、持久化、消费)最重要的一环,实现思路的话也很简单,简单描述就是支持发布可重试,实现如下:

  • 数据库中增加一张kafka_message表,在发布消息时先插入消息到kafka_message表
  • 增加一个定时任务,不断查询kafka_message表,遍历发布消息到kafka,然后再从kafka_message表删除发布成功的记录

另外消费时可靠性主要靠消费机制保证MessageDeliverySemantics=AT_LEAST_ONCE

3.Kafka组件化及多集群消息消费实现

a.组件化

组件指的是软件系统中的独立单元。因为Kafka本身已经算是一个消息组件,我在此处指的是通过将kafka、redis等中间件抽象成:组件类型、组件名称,通过这两个概念可以拿到该组件的一个集群地址去使用,在后面的内容中也会使用这种概念。

b. 多集群消息消费实现

  • 一些抽象类及枚举:

    • AbstractEventProcessor,消费者

      复制代码
      protected abstract void process(String msg); //消费消息实现
      
      public abstract int runners();  //消费者数量
      
      public abstract KafkaTopic topic();  //消费的主题
    • IConsumerGroupContext ,消费者组上下文接口,抽象了同一类消费者

      复制代码
      Properties getConsumerProperties();//单次拉取消息条数、序列化工具类、反序列化工具类
      
      Class<? extends AbstractEventProcessor> getProcessorClass(); //获取消息处理类
      
      MessageDeliverySemantics getDeliverySemantics(); //消费重试机制
      
      KafkaTopic getTopic(); //消息主题
       
      String getBootstrapServers();  //连接地址
    • KafkaClusterType : Kafka集群枚举,会配置成跟一个组件名对应的形式如

      复制代码
      {"TEST":"Kafka1","TESTNEW":"Kafka2"}
    • KafkaTopic,主题枚举,例如

      复制代码
      TEST_TOPIC("test", "测试topic", KafkaClusterType.TEST)
    • ConsumerRunnerPoolConfig,消费者线程池配置,包含Topic、processor、runner(消费者数量)

    • ConsumerRunnerPool, 消费者线程池类

  • 消费者启动的大概流程

    • 读取需要消费的Topic

    • 根据Topic 获取过滤获得对应的IConsumerGroupContext类,contextList

    • 遍历contextList,context

      • 根据context填充ConsumerRunnerPoolConfig

      • 再根据ConsumerRunnerPoolConfig去启动ConsumerRunnerPool

        核心线程池和最大线程池都是消费者数量,可以通过硬编码/配置

整体思路比较简单,但是抽象支持集群和组件配置后,可以支持集群切换或多集群,这对于灵活应对Kafka集群的切换和灾备是很有意义的。

相关推荐
笨鸟先飞的橘猫3 小时前
skynet——分布式支持
分布式·skynet
lzhcoder4 小时前
Spring Boot 集成 Kafka:先跑通 Demo,再避开那 80% 的人踩过的坑
java·kafka
ACP广源盛139246256737 小时前
GSV6155 @ACP#工业车规 DP1.4 重定时器 Retimer
大数据·人工智能·分布式·嵌入式硬件
ACP广源盛139246256738 小时前
GSV2221@ACP# DP1.4 MST 多流显示转换芯片国产工业多屏
大数据·人工智能·分布式·嵌入式硬件·spark
ACP广源盛139246256739 小时前
GSV2231@ACP# 增强型 8K MST 多屏扩展芯片
大数据·人工智能·分布式·嵌入式硬件
虚心的百褶裙9 小时前
远程调用服务架构设计及zookeeper技术详解(下篇)
分布式·zookeeper·云原生
清晨曦月9 小时前
【从零构建分布式在线评测系统】二、Judge0服务器上的心跳程序
运维·服务器·分布式
万联WANFLOW1 天前
SD-WAN 控制平面高可用怎么做?SDWAN 控制器挂了,全网会发生什么
运维·网络·分布式·架构
月落归舟1 天前
从单机到分布式:互联网系统架构演进全流程
分布式·系统架构
搬砖柯1 天前
系列12-接口压测怎么做成平台能力?自研 httpx 引擎、分布式 Worker 与 Locust 选型对照
分布式·测试工具·性能优化·开源·自动化·httpx