Kafka方案分析与数据传输

1Kafka三种特性

1) 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。

2) 可以储存流式的记录,并且有较好的容错性。

3) 可以在流式记录产生时就进行处理。

2Kafka API及功能:

1) The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。

2) The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。

3) The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。

4) The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。

3Kafka默认规则

1) 每个主题可以有多个分区(均衡压力)

2) 每个主题可以由多个消费组来分别消费(入ES和入DB等)

3) 每个消费组可以由多个消费者组成

4) 每个主题的单个分区仅能被同一消费组的一个消费者消费(保证同一分区消息的顺序性)

5) 同一个主题同一个消费组,消费者总数不超过分区数,否者多余消费者会闲置

6) 生产者可批量发送消息

7) 生产者可通过异步回调验证消息是否写入kafka

8) 生产者发送消息不指定分区,kafka默认顺序轮询均衡分配到每个分区

9) 消费者可批量消费消息

10) 消费者可通过提交偏移量方式确认消息消费成功

4Kafka具体方案设计

Kafka消息传送需要对key和value的序列化,以流进行传递,为了兼容多平台,万物皆字符串思想,对key和value皆采用org.apache.kafka.common.serialization.StringSerializer序列化,消费者接受到消息后kafka自动将其转换成字符串方便后续业务进行处理。

为了提升kafka的吞吐量,利用CPU换内存及IO的思想,对消息体进行压缩,采用gzip压缩方式,kafka架包会自动对消息进行压缩和解压。

注:当然要视实际情况而定,可以通过测试取舍是否压缩。

1) 生产者与消费者示意图

注:消费者可以开启多线程对批量消息进行分片处理增加消息处理能力。(但多线程需要通过CountDownLatch来等待所有线程执行完再提交偏移量,防止出现异常导致某些消息未消费的情况发生)。

2) 消费者与分区示意图

3) 性能保证

定抄数据发布至同一个主题中,每个主题8个分区(此处可以配置,视情况调优此参数),使用同一个消费组,此消费组有8个消费者,kafka自动重平衡达到每个消费者消费一个分区的消息,每个消费者采用批量读取500条消息(此值可配置),每个消费者采用多线程数据分片技术,提升单消费者的吞吐量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值