Kafka集群选型与实施策略

需积分: 20 9 下载量 21 浏览量 更新于2024-09-07 收藏 371KB DOCX 举报
"本文主要探讨了Kafka集群的选型方案,包括与其他消息中间件的对比,采用Zookeeper+kafka的集群配置,以及解决消息顺序问题的方法。此外,还介绍了Kafka的一些基本概念,如主题和分区。" Kafka作为当今流行的消息中间件,其在大数据处理和实时流处理领域具有显著优势。在选型过程中,我们需要对比不同产品的主要指标,如ActiveMQ、RabbitMQ和Kafka。ActiveMQ和RabbitMQ基于AMQP协议,而Kafka则采用自己的设计,它更适合大规模、高吞吐量的场景,且在消息持久化和分布式特性上表现出色。 在Kafka集群方案中,Zookeeper起着关键的角色。Zookeeper是一个分布式协调服务,用于管理Kafka的元数据,例如,它负责集群中服务器的状态管理和负载均衡。当Kafka集群需要动态扩容或减容时,Zookeeper会通知系统进行调整。Zookeeper集群通常按照2*n+1的规则搭建,确保即使有部分节点故障,集群仍能保持半数以上节点存活,继续提供服务。 解决消息顺序问题是Kafka的一个挑战。在Kafka中,Producer可以通过同步发送模式保证消息顺序,但这种方式可能会影响性能。一种常见的做法是根据订单ID进行哈希,将相同订单ID的消息发送到同一分区,从而确保在同一分区内的消息顺序。同时,Consumer按照分区顺序消费消息,通过限制并发线程数量(与分区数量一致)来保证顺序。 Kafka的基本概念包括: 1. 主题(Topic):是消息的分类,每个业务通常对应一个主题,类似于新闻分类。 2. 分区(Partition):是主题下的逻辑单元,消息在分区内部按照FIFO原则存储。分区是Kafka提升性能的关键,增加分区可以提高并行处理能力,同时每个分区由一个Consumer线程单独消费,确保无竞争条件下的顺序性。 Kafka集群方案选型需要考虑系统的扩展性、消息顺序需求以及性能要求。结合Zookeeper的使用,Kafka可以构建出高可用且具备良好性能的消息处理系统。
2019-03-13 上传
第一章 需求 对方的网页文件接入到我方服务器。每个文件要知道其:网站、采集时间等。 通过消息队列将多个远程服务器上的【数据文件】源源不断的接入到本地服务器,数据文件是下载下来的网页,传输过来的时候还要带上来自的网站和下载日期等信息。 目前讨论消息队列用Kafka。 第二章 基本方案 1、我现在能想到的就是: 远程服务器编写程序, 不停读取文件的内容成为一个字符串,然后再加上来自的网站、下载日期等信息,组合成一个JSON字符串,通过调用kafka的生产者API将字符串写入Kafka。 2、JSON数据格式设计: { “source”: “来源网站名” , “filename” : “html文件名”, “download-date”: “下载日期” , ”content” : “一个html文件的全部字符串 “ } 注:假设.js \.css \.png文件都不需要 3、消息主题的设计: 一个网站对应一个topic,对应到本地的一个文件夹。 4、其他: 如果只是传输文件,不考虑加上网站、下载日期等信息的话,我知道的用Flume可能更方便,但是要加上网站、下载日期的信息(类似主题订阅的功能),flume就不太方便了? 5、可能存在的顾虑:网页数据文件对数据顺序性的要求的程度。 Kafka单分区的情况小支持消息有序性, 多分区下确保消息有序的方案还需深入调研。 如果之后一个主题下对应的网页文件没有特别的传输顺序要求,这一块应该会容易处理很多。