kafka设计要点简介

最近在学习kafka,参考官网上的文档,概括kafka的主要设计点,希望能帮助大家对kafka的设计有一个大概的了解,没说清楚的地方,或者不对的地方希望大家指出,相互帮助学习,

4.        kafka设计简介

1     

2     

3     

4     

4.1    动机

  • 高吞吐量以支持大数据量的事件流,例如实时日志集结
  • 能很好处理大数据积压以支持线下阶段性数据加载
  • 低延迟的消息传送,以支持传统的消息系统应用
  • 支持分区,分布式,实时处理
  • 高可用,故障容错

因此,kafka被设计成一个有独特的元素,类似于数据库日志的传统的消息系统

4.2    持久化

  • Kafka直接依赖系统的文件系统存储和缓存,(java NIO)
  • 常量时长足够了

消息系统大多数使用Btree作为持久化数据结构,存储系统一般混合了高速缓存和真正的磁盘读取,所以读取性能是不错的。但是随着数据量的成倍的增长,性能也会成倍的下降

所以kafaka 使用的是持久化队列,这样设计明显的优势是与数据量大小无关,并且读不会阻塞写,服务器可以利用便宜的硬盘获得可观的性能

4.3    效率

支持批量存取,批量会有的影响,大的网络数据包,大的连续的磁盘操作,连续内存块请求等等,所有这些都可以使kafka将突发性的大的数据流量转变为线性写

支持数据压缩,并使用直接内存(javaNio)避免不必要的程序级别的复制,支持批量数据压缩(这样比单独压缩一个消息更有效),只有在消费信息的时候才会解压

4.4    Producer(生产者)

负载均衡

生产直接可以将消息发送到broker而不需要任何中间路由,因为kafka每个节点都提供关于其主题每个分区的leader在那个节点的相关元数据查询

异步发送

批量操作是效率提升的一个重要驱动,producer可以在指定的边界缓存操作以批量操作

4.5    Consumer(消费者)

  • Push vs poll

Kafka遵从大多数消息系统的设计,由producer将数据push到broker,由consumer 从

Broker pull数据。而Scribe and Apache Flume 遵从了一个不同的设计(push based),但这样有个坑,假如consumer的处理效率没有broker转发效率高,就有可能压垮消费者

4.6    消息传播

4.7    复制

  • 法定人数和状态机

大部分日志复制都采用state-machinestyle,即只要领导者可以用,领导者选择那些命令用来复制,跟随者只要有序的复制这些值就可以了

大部分系统使用多数人投票策略(This majority vote approach)来决定leader和消息提交确认,这样的好处就可以选择其中最快的机器作为新的leader.但是这种策略的坏处是,系统不能容忍多的故障。比如你要能容忍f个错,你就必须有2f+1的复制才足够,这样对于大规模数据来说是不可行的,因为这样你损失了太多吞吐量了,比如(paxos算法)

而kafak利用zookeeper动态地维护了一套in-syncreplica(ISR),只有ISR集里面的才可以被选为leader,所以容忍f个故障,只要有f+1个复制就可以了。虽然要容忍f个故障,

Majority vote 和 ISR都需要等同样多的复制完成。

kafka另一个特性是允许有不完整数据的节点恢复

  • 耐用和高可用保证

Producer配置request.required.acks=-1,0,1

0

1表示只要in-sync里的replica都接受了,就认为提交成功

-1 表示要in-sync里的复制都完成写了,才认为提交成功

  • 复制管理

以上复制讲的是一个主题的一个分区,而kafka管理者上千个这样的分区。所以kafka平衡分区以避免集中一个大的topic的所有分区在几个节点(broker)上,因此kafka将领导职权平衡到所有节点上,每个节点都是它所保存的分区的一部分的leader

当一个节点失败,只会对受影响的分区进行选举,我们选择一个broker作为controller,controller负责侦测broker级别的错误,并负责受影响分区重新选择leader

时间: 2024-10-05 04:33:33

kafka设计要点简介的相关文章

Kafka 设计与原理详解(一)

一.Kafka简介 本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料. 转载请注明出处 : 本文链接(http://blog.csdn.net/suifeng3051/article/details/48053965) 1.1 背景历史 当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 以上几个挑战形成了一个业务需求模型,即生产者

游戏UI设计要点——你抓住玩家的心了吗?

游戏美术行情在线        游戏UI设计的好坏决定了你和玩家之间的关系,到底是初次相遇的美好呢还是"山无棱天地合乃敢与君绝"?       那么要做一名具有出色"撩妹"技巧的UI设计师,就要抓住游戏UI设计的要点,这样才能抓住玩家的心嘛!今天就跟大家聊聊游戏UI的撩妹哦不设计要点. 话说"士为知己者死,女为悦己者容",那么如何才能成功地引起对方的注意呢?这就必须有个互动的过程啦,这个过程通俗点说的呢就是"撩妹".     

【netty】Netty系列之Netty百万级推送服务设计要点

1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发推送服务遇到的各种技术问题. 由于咨询者众多,关注点也比较集中,我希望通过本文的案例分析和对推送服务设计要点的总结,帮助大家在实际工作中少走弯路. 1.2. 推送服务

Kafka设计解析(三)- Kafka High Availability (下)

本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/06/08/KafkaColumn3 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,Broker启动,Follower从Leader fetch数据等详细处理过程.同时介绍了Kafka提供的与Replication相关的工具,如重新分配Partition等

Kafka设计

[Apache Kafka]Kafka设计 在开始开发producer和consumer之前,先从设计的角度看一看Kafka. 由于重度依赖JMS,且实现方式各异.对可伸缩架构的支持不够,LinkedIn开发了Kafka来实现对活动流数据和运营指标数据的监控,这些数据包括CPU.I/O使用数据.请求响应时间等.开发Kafka时主要目标是提供以下特性: 支持自定义实现的producer和consumer的API 以低开销的网络和存储实现消息持久化 支持百万级消息订阅和发布的高吞吐量 分布式和高可伸

Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告

本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/12/31/KafkaColumn5_kafka_benchmark 摘要 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafka的性能,以及如何使用Kafka Manager监控Kafka的工作状态,最后给出了Kafka的性能测试报告. 性能测试及集群监控工具 Kafka提供了非常多有用的工具,如Kafka设计解析(三)- Kafka High Avail

atitit.html编辑器的设计要点与框架选型 attilax总结

atitit.html编辑器的设计要点与框架选型 attilax总结 1. html编辑器的设计要求1 1.1. 障碍访问 1 1.2. 强大Ajax上传 1 1.3. Word完美支持 2 1.4. 安全的UBB 2 1.5. 自动获取远程文件2 1.6. 文字水印/图片水印2 1.7. Word/Excel导入2 1.8. 强大表格处理功能2 1.9. 文件库2 1.10. 超强可视设置3 1.11. 国际化多语言支持3 1.12. 缩略图3 1.13. 支持WEBEQ公式编辑接口3 2. 

Netty系列之Netty百万级推送服务设计要点

原文:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points 1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发

转载:开发移动应用的7大设计要点

移动应用已成为获得全球潜在用户最为有力的便捷手段,企业主不应忽视一款设计抢眼.功能全面的商业移动应用的重要性. 在开发移动应用时,用户体验(UX)和用户界面设计(UI)是两大重点,不容忽视.在进行任何应用的开发前,提前理解目标市场的行为模式非常必要.如果不能专注于用户体验,无论设计时花了多少时间,都可能影响到应用的可信度.所谓的“不良用户体验”很可能是“不好的用户界面”所导致的.想要设计体验更佳的应用,在设计开发移动应用时必须牢记并遵照以下要点,这些设计要点在开发移动应用中至关重要: 1. 重视