文档章节

kafka 源码调研系列1 特色

川明君
 川明君
发布于 2013/07/17 11:22
字数 989
阅读 1041
收藏 8

     kafka 相关调研很多,其中以FrankHui大神(http://my.oschina.net/ielts0909)的kafka系列文章非常精彩,悲催的是,前期调研时候没有看到,老老实实的看完了Apache kafka官方文档(http://kafka.apache.org/introduction.html),但还是云里雾里,和同事讨论的时候发现很多细节都没有琢磨清楚,再看kafka孵化MQ产品MetaQ(http://www.iteye.com/magazines/107)的相关资料和FrankHui的系列博文,对照官方设计文档,有了更清楚的认识。

     kafka比较新颖的特色如以下:

     1 结合实时数据和离线大数据两种数据处理业务,因此方便有相关需求的同志不需要搭建hadoop专门处理离线数据,而后又搭建storm等来处理实时数据;

     2 采取文件系统作为数据存储介质,而不是像ZeroMq之类的基于内存的mq,设计体现的好处是既能保证高吞吐率的同时,又能保证极端情况下数据的恢复,更好的是,极大节约了内存成本。当然为了媲美基于内存MQ的读写性能,kafka做了一些巧妙的设计,最突出的就是利用顺序读写代替基于BTree的读写方式和Zero-copy(具体技术细节见https://www.ibm.com/developerworks/linux/library/j-zerocopy/)。另外,持久化的问题也迎刃而解。

     3 利用consumer存储消费信息,而非传统的broker存储,这样好处是避免的broker存储时对Message的多标签化。具体而言,如果由broker存储消息,一条Message的消费分为broker下发->consumer确认消费->broker确认3个状态,中间涉及两次网络通信,期间可能引起各种原因导致的重下发,而重下发又涉及到消息回滚的排序方式。简而言之,如果重下发的消息入队首,能够立刻下发,减小延迟,但是可能出现该消息错误引起的队列阻塞;入队尾,可能产生很长时间的延迟。
     如果换consumer存储消息,可以避免上述麻烦,感觉这个设计很赞,但是其存在基础是基于kafka顺序读写的设计方式。具体这样做有什么可能的弊端呢?自己当初设计类似流程的时候都在扣标签细节,怎么没有想到这个思路?思维太固化了还是新方案有什么缺陷?(欢迎讨论)

    4 利用游标offset来标注消费数据,可以非常方便的回滚信息。

    5 利用语义分区实现partition,并且保证一个分区发给一个消费组里面的一个consumer,由于partition中消息有序,从而保证该consumer的接收消息有序,从而实习数据收发一致性,并同时保证负载均衡。

    kafka可能的问题:

    1 负载均衡问题:如果有些生产者产生的消息远多于其它生产者,按每个代理对TCP连接进行平均分配可能会导致每个代理接收到的消息总数并不平均;

    2 消息推拉方式:kafka采用producer push消息,consumer poll消息的方式,可能会出现一些应用场景不匹配问题;

    3 partitions 没有副本控制。

    以上问题我在kafka 0.8中已经看到有所更新,衷心佩服各位大牛!

    接下去我去继续写一些关于源码和具体调试中关于kafka的一些想法。新人报道,知识水平,表达方式各方面都存在欠缺,希望大家海涵,同时也希望大家一定要多多指出不足,多多交流,谢谢。

 


   


© 著作权归作者所有

共有 人打赏支持
川明君
粉丝 7
博文 6
码字总数 2606
作品 0
朝阳
程序员
私信 提问
加载中

评论(2)

川明君
川明君

引用来自“影之歌”的评论

今天开始调研kafka 看见这篇文章很受指点 赞

有空可以一起学习。
散关清渭
散关清渭
今天开始调研kafka 看见这篇文章很受指点 赞
apache kafka技术分享系列(目录索引)

目录索引: Kafka使用场景 1.为何使用消息系统 2.我们为何需要搭建ApacheKafka分布式系统 3.消息队列中点对点与发布订阅区别 kafka开发与管理: 1)apachekafka消息服务 2)kafak安装与使用 ...

dannyhe
2015/09/06
453
1
搞懂分布式技术23:SpringBoot Kafka 整合使用

Spring Boot系列文章(一):SpringBoot Kafka 整合使用2018-01-05 ×文章目录 1. 前提 2. 创建项目 3. Kafka 设置 4. 运行 5. 关注我 6. 最后 前提 假设你了解过 SpringBoot 和 Kafka。 1、...

你的猫大哥
2018/07/05
0
0
kafka系列文章索引(结束)

apache kafka在数据处理中特别是日志和消息的处理上会有很多出色的表现,这里写个索引,关于kafka的文章暂时就更新到这里,最近利用空闲时间在对 kafka做一些功能性增强,并java化,虽然现在...

老先生二号
2017/05/28
0
0
log4j2发送消息至Kafka

title: 自定义log4j2发送日志到Kafka tags: log4j2,kafka 为了给公司的大数据平台提供各项目组的日志,而又使各项目组在改动上无感知。做了一番调研后才发现log4j2默认有支持将日志发送到kaf...

微笑向暖wx
2018/10/16
0
0
SPARK 知识地图

1 Table of Contents spark 总揽 spark core spark sql spark mllib spark graphx spark streaming 2 spark 总揽 spark官网:https://spark.apache.org/ spark 资料集中营,覆盖各种视频,论......

bigsloth
2015/09/14
125
0

没有更多内容

加载失败,请刷新页面

加载更多

js中原型模式

原型模式就是用克隆对象来创建对象的,在es6中提供了Object.create方法来克隆对象 在不支持该方法的浏览器中,可以使用以下代码: Object.create = Object.create || function (obj) { ...

莫西摩西
7分钟前
0
0
ORACLE插入insert带where条件

ORACLE插入带条件 insert into THIRD_PAYEE_ACCOUNT_DETAIL t (id, collection_mode, t.store_code) select Third_Payee_Account_Detail_Seq.Nextval,'006','A05K' from dual where not......

Cobbage
17分钟前
0
0
分享几张Java架构大牛总结的架构知识脑图

前言 系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户...

Java-飞鱼
24分钟前
0
0
2019BATJ面试题详解:MyBatis+MySQL+Spring+Redis+多线程

这里为大家分享一些面试的一手资料,供大家迎接接下来的金三银四跳槽季 Spring Spring 概述 什么是spring? 使用Spring框架的好处是什么? Spring由哪些模块组成? 解释AOP模块 Spring配置文件...

别打我会飞
27分钟前
0
0
首场百度大脑开放日来袭 | 全新开放24项AI技术

活动当天,百度AI技术生态部总经理喻友平,就百度大脑平台与生态进行了全面的详解,同时展示了百度大脑开放平台Q1核心升级内容,包括语音技术、视觉技术、自然语言处理、知识图谱等通用AI能力...

PaddleWeekly
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部