linkedin高吞吐量分布式消息系统kafka使用手记

标签: java 架构研究 kafka | 发表时间:2012-02-24 18:50 | 作者:54chen
出处:http://www.54chen.com

以下内容由 [五四陈科学院]提供

linkedin kafka
kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:

通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。
支持通过kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。

设计侧重高吞吐量,用于好友动态,相关性统计,排行统计,访问频率控制,批处理等系统。大部分的消息中间件能够处理实时性要求高的消息/数据,但是对于队列中大量未处理的消息/数据在持久性方面比较弱。

kakfa的consumer使用拉的方式工作。

安装kafka
下载:http://people.apache.org/~nehanarkhede/kafka-0.7.0-incubating/kafka-0.7.0-incubating-src.tar.gz

> tar xzf kafka-.tgz
> cd kafka-
> ./sbt update
> ./sbt package
启动zkserver:
bin/zookeeper-server-start.sh config/zookeeper.properties
启动server:
bin/kafka-server-start.sh config/server.properties
就是这么简单。

使用kafka

  1. import java.util.Arrays;  
  2. import java.util.List;  
  3. import java.util.Properties;  
  4. import kafka.javaapi.producer.SyncProducer;  
  5. import kafka.javaapi.message.ByteBufferMessageSet;  
  6. import kafka.message.Message;  
  7. import kafka.producer.SyncProducerConfig;  
  8.   
  9. ...  
  10.   
  11. Properties props = new Properties();  
  12. props.put(“zk.connect”, “127.0.0.1:2181”);  
  13. props.put("serializer.class", "kafka.serializer.StringEncoder");  
  14. ProducerConfig config = new ProducerConfig(props);  
  15. Producer<String, String> producer = new Producer<String, String>(config);  
  16.   
  17. Send a single message  
  18.   
  19. // The message is sent to a randomly selected partition registered in ZK  
  20. ProducerData<String, String> data = new ProducerData<String, String>("test-topic", "test-message");  
  21. producer.send(data);      
  22.   
  23. producer.close();  

这样就是一个标准的producer。

consumer的代码

  1. // specify some consumer properties  
  2. Properties props = new Properties();  
  3. props.put("zk.connect", "localhost:2181");  
  4. props.put("zk.connectiontimeout.ms", "1000000");  
  5. props.put("groupid", "test_group");  
  6.   
  7. // Create the connection to the cluster  
  8. ConsumerConfig consumerConfig = new ConsumerConfig(props);  
  9. ConsumerConnector consumerConnector = Consumer.createJavaConsumerConnector(consumerConfig);  
  10.   
  11. // create 4 partitions of the stream for topic “test”, to allow 4 threads to consume  
  12. Map<String, List<KafkaMessageStream<Message>>> topicMessageStreams =   
  13.     consumerConnector.createMessageStreams(ImmutableMap.of("test", 4));  
  14. List<KafkaMessageStream<Message>> streams = topicMessageStreams.get("test");  
  15.   
  16. // create list of 4 threads to consume from each of the partitions   
  17. ExecutorService executor = Executors.newFixedThreadPool(4);  
  18.   
  19. // consume the messages in the threads  
  20. for(final KafkaMessageStream<Message> stream: streams) {  
  21.   executor.submit(new Runnable() {  
  22.     public void run() {  
  23.       for(Message message: stream) {  
  24.         // process message  
  25.       }   
  26.     }  
  27.   });  
  28. }  


想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

相关 [linkedin 吞吐量 分布] 推荐:

linkedin高吞吐量分布式消息系统kafka使用手记

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息. 支持通过kafka服务器和消费机集群来分区消息.

LinkedIn的线上搜索 — 分布式搜索相关

- Shell Wang - J2EE企业应用 顾问/咨询- H.E.&#39;s Blog
   某个项目缘故对分布式搜索的方式和技术的话题开始高度关注,看了不少资料,如 Apache Solr 和 Katta. 好东西大家应该分享, 最近看到LinkedIn 推出的新产品 LinkedIn Signal ,该产品在架构设计上和分布式搜索有着紧密的联系,LinkedIn搜索引擎架构师王坚 (John Wang) 在团队的blog上公布了一些产品内幕,这一资料让我得到了很多启发.

GC对吞吐量的影响

- - Java译站
在看 内存管理术语表的时候偶然发现了” Pig in the Python(注:有点像中文里的贪心不足蛇吞象)”的定义,于是便有了这篇文章. 表面上看,这个术语说的是GC不停地将大对象从一个分代提升到另一个分代的情景. 这么做就好比巨蟒整个吞食掉它的猎物,以至于它在消化的时候都没办法移动了. 在接下来的这24个小时里我的头脑中充斥着这个令人窒息的巨蟒的画面,挥之不去.

中国的LinkedIn们

- - It Talks-魏武挥的blog
我倒并不想完全断言中国BSNS没有一点点的未来,但做生意是真金白银的消耗,非常讲究一个timing问题. 中国BSNS,要想走出中国的LinkedIn的道路,恐怕得花上比LinkedIn自身发展更长的时间. 与目前股价一路扶摇直上的LinkedIn相比,中国的BSNS(商务社交,也有自称PSNS专业社交的)显得有些不愠不火,差强人意.

向LinkedIn学习什么

- 车东 - 《商业价值》杂志
准确的定位和极优的数据整理能力,是LinkedIn最终成功的原因. 中国模仿者们需要模仿到基因层面才会有希望. 2010年12月,美国非上市公司股票交易平台SecondMarket评选出五大估值超10亿美元的非上市公司,LinkedIn挤掉Youtube等大热门而上榜. LinkedIn这家比Facebook还早的老牌社交网站,在将近10年的互联网大潮中,一直以低调稳健但内容乏味的姿态潜行.

中国会不会有Linkedin?

- zhangv - It Talks--上海魏武挥的博客
本周根据外电,Linkedin已经为自己的IPO做了定价,区间大致在32-35美元,预期募集资金2.71亿,估值在30-33亿美元. 这个主打所谓高端人群,74%会员受过高等教育,被誉为“职场SNS”的网络公司,拥有1亿用户,2010年营收2.43亿美元,利润1500多万. 据公司声称,在linkedin上,有200万个公司页面,73%的财富100强公司用过它的招聘解决方案,世界500强则全数成为它的会员.

[原]LinkedIn Cubert安装指南

- - OopsOutOfMemory盛利的博客
最近工作需要,调研了一下LinkedIn开源的用于复杂大数据分析的高性能计算引擎Cubert. 自己测了下,感觉比较适合做报表统计中的Cube计算和Join计算,效率往往比Hive高很多倍,节省资源和时间. 下面看下这个框架的介绍:. Cubert完全用Java开发,并提供一种脚本语言. 它是针对报表领域里经常出现的复杂连接和聚合而设计的.

LinkedIn架构这十年

- - 鸟窝
原文: A Brief History of Scaling LinkedIn. Josh Clemm是LinkedIn的高级工程经理,自2011年加入LinkedIn. 他最近(2015/07/20)写了一篇文章,介绍了LinkedIn针对用户规模急速扩大带来的架构方面的变革. 文章有点像子柳写的 淘宝技术这十年.

Linux系统调优:提高磁盘吞吐量

- - 开心平淡对待每一天。热爱生活
          在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,幸好LINUX 可以 动态调整请求队列数,默认的请求队列数存放在 /sys/block/hda/queue/nr_requests 文件中,. 现在我们来测试请求一个1G大小的文件(测试环境为虚拟机):. 由此看出,共花了1分55秒,现在把 nr_requests 的 128 改成 512 再试下:.

用户到底如何使用 LinkedIn?

- jl1987 - 爱范儿 · Beats of Bits
作为最热门的职业社交网络,LinkedIn 正以每秒增加一位新注册用户的速度快速扩张. 近日,由互联网调研公司 Lab42 根据500位LinkedIn用户的调查反馈,制作了一张名为 “The LinkedIn Profile”的信息图. 调查问卷就用户使用LinkedIn 网站的目的和效果进行了分析和归总.