原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
 

近来无事研究了一下kafka,并且用golang连接kafka做了producer和consumer的简单测试,对kafka有了一些基本的认识。

 
kafka不同于activemq和rabbitmq等这种符合AMQP协议的标准消息队列产品,它有一些list或者array的特征,可以指定从offset读取。阿里巴巴的rocketmq在原型产品中借鉴了kafka的设计思想,现已在阿里大规模使用,详情参考:https://github.com/alibaba/RocketMQ
 
kafka提倡使用拉模式,并且可以对消息重复消费,看起来不符合传统queue的思想,但却提供了额外的好处,比如:某模块更新到产线发现有bug,需要将上线以来的消息全部重新消费,即消息回溯。
 
kafka是高并发型的消息队列,但这是有前提条件的。条件是topic要定义多个partition,将压力分担到各个partition上。topic是逻辑概念,partition是物理存在各个broker,以此达到负载均衡的目的。要注意的是,各个partition可以独立消费,各partition间的消息是无法保证顺序性的,顺序只存在同一partition。以我的经验看,无论哪种MQ,要严格保证顺序,都要付出昂贵的代价,因此弱化顺序是有必要的。
 
kafka的另一个特性是高可用。放眼目前业界数据层的高可用解决方案,采用的无非都是两种:冗余数据和共享存储。后者以价格昂贵著称,比如SAN,给土豪公司玩的。在党中央构建节约性社会的号召下,我建议使用前者。冗余数据最常见的便是日志复制,kafka的道理也一样。由一组节点组成leader,follower组成小的cluster,由zookeeper做协调(Paxos算法)。leader,follower的比例和数量可配置,一般为1:2。在写入的时候, follower会不断复制leader的数据,leader挂掉后会从follwer中选举新的leader。
 
kafka使用了零拷贝技术来优化性能,直接发送磁盘的数据到socket。此为其极为取巧的设计和亮点。

kafka的一些认识的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  3. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  4. .net windows Kafka 安装与使用入门(入门笔记)

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  5. kafka配置与使用实例

    kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列

  6. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  7. Kafka副本管理—— 为何去掉replica.lag.max.messages参数

    今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...

  8. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  9. kafka

    2016-11-13  20:48:43 简单说明什么是kafka? Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息 ...

  10. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

随机推荐

  1. 123. Best Time to Buy and Sell Stock (三) leetcode解题笔记

    123. Best Time to Buy and Sell Stock III Say you have an array for which the ith element is the pric ...

  2. V8Sharp的中文乱码问题解决

    V8是一个开源的javascript引擎,到现在为止堪称为是性能最好最稳定的javascript.因此还诞生了一个基于此引擎的服务端开发框架:Node.js.由此可见此引擎的牛逼之处.由于打算在后续项 ...

  3. Git 教程

    Git 教程 新建 模板 小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过设置里的修改模板来改变新建文章的内容. Git使用 Git - 关于版本控制 TortoiseGit日常 ...

  4. JAVA编程心得-Eclipse/MyEclipse 中文乱码解决办法

    将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclipse编码格式不同.总结网上的建议和自己的体会 ...

  5. android六大框架

    -LinearLayout线性布局 垂直排序,每行仅包含一个界面元素 水平排序,每列仅包含一个界面元素 orientation,Layout-weight,Layout-margin(外边距,与屏幕) ...

  6. c#利用WebClient和WebRequest获取网页源代码的比较

    前几天举例分析了用asp+xmlhttp获取网页源代码的方法,但c#中一般是可以利用WebClient类和WebRequest类获取网页源代码.下面分别说明这两种方法的实现. WebClient类获取 ...

  7. 最常用的reset代码

    /*css reset code */ /**** 文字大小初始化,使1em=10px *****/body { font-size:12px;} /*字体边框等初始化*/body,div,dl,dt ...

  8. android shader 用法

    转自 http://blog.csdn.net/abcdef314159 http://blog.csdn.net/aigestudio/article/details/41799811 Shader ...

  9. Freemarker常用指令使用范例

    我的開發環境 框架:           springmvc+freemarker 開發工具:    springsource-tool-suite-2.9.0 JDK版本:    1.6.0_29 ...

  10. RabbitMQ 记录

    RabbitMQ 中文文档 : http://rabbitmq.mr-ping.com/description.html 官方教程译文: 一 http://blog.csdn.net/xiaoxian ...