IT@程序员猿媛简友广场读书

Kafka实现高性能、高可靠性的数据采集和监控系统

2019-04-01  本文已影响15人  皮皮杂谈

Kafka作为一个分布式消息队列,具有高性能和可靠性等特点。本文以某数据采集和监控系统为例,将详细阐述Kafka如何实现这些设计目标。某数据采集和监控系统的运行数据包含15种类型,数据特征呈现出时间序列特性,并提供3台服务器搭建Kafka集群。考虑到时间序列数据对有序性的要求,以数据类型为单位设计主题,共15个主题,每个主题下划分一个分区。

分区策略

从生产者而言,生产者将消息推送给代理时,Kafka支持三种消息应答确认方式(注意:确认是代理在内存中接收到数据及返回,所以效率极高)。在Spring-Kafka中应答模式通过设置ProducerConfig.ACKS_CONFIG属性的acks值,acks=0表示异步返回,生产者无需等待确认;acks=1,表示等待leader确认之后再返回;acks=-1,表示等待leader和follower都确认之后返回。acks=0写入性能最高,acks=-1可靠性最好。某数据采集和监控系统在采集数据写入性能和可靠性级别进行了折中选择,设置消息的应答模式acks=1。某监控系统编写的生产者程序配置,如下图所示:

生产者端配置

从消费者而言,消费者从代理拉取消息时,Kafka提供可控的消息传输机制。在消息系统中,根据接收者可能受到重复消息的次数,将消息传递机制分为三种。在某数据采集和监控系统中,我们选择的是at least once,即发送者将消息发送给消费者后,需等待确认,如果未收到确认消息,则会重发消息。在Spring-Kafka参数设置过程中,重点关注ConsumerConfig.AUTO_OFFSET_RESET_CONFIG和ConsumerConfig.GROUP_ID_CONFIG参数配置。如下图所示:

消费者端配置

根据我们在某数据采集和监控系统中的实践经验,ConsumerConfig.GROUP_ID_CONFIG定义的消费者组,一定要注意以下几点:

1、如果消费者组中的消费者数目小于所读取的主题中的分区数目,则某些消费者可能会读取多个分区中的数据,且这些数据的读取顺序与最初写入顺序可能不一致,在处理时间序列数据时,要特别额外注意这一点。

2、如果消费者组中的消费者数目大于所读主题中的分区数目,则某些消费者会闲置,永远不会读到数据。

3、增加消费者组中的消费者数量,会导致负载重分布,即将某些消费者读取的分区重新分配给新增的消费者。

上一篇下一篇

猜你喜欢

热点阅读