原创文章转载请注明出处:@协思, 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. 《笨办法学C》笔记之Makefile

    使用gcc编译C语言源码 在Linux系统中,C语言源码需要用gcc编译为二进制可执行文件,才能够运行. $ gcc test.c -o test 这句命令就将test.c文件编译为test二进制可执 ...

  2. uploadify 后台动态传参数

    最近项目中用到上传控件,参数需要动态传参,经过查询总结了一下Uploadify 动态传参 jQuery(document).ready(function () { var ctrlid = getQu ...

  3. Sql日期时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...

  4. 自动生成Model层中对应表的各个字段

    select 'public '+ case t.name when 'varchar' then 'string' when 'smallint' then 'Int16' when 'int' t ...

  5. Guidelines for accessing OneDrive from an app

    Guidelines for accessing OneDrive from an app https://msdn.microsoft.com/en-us/library/windows/apps/ ...

  6. 慕课网Java高并发秒杀学习

    课程地址:http://www.imooc.com/learn/587 一个很好:spring,springMVC,mybatis,bootstrap,jQuery,mysql,Restful学习案例 ...

  7. The Singleton pattern

    作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一 ...

  8. centos 7安装配置bind

    环境: 三台虚拟机,全部安装Centos 7, tony4.hadoop.com 192.168.31.223 tony5.hadoop.com 192.168.31.224 tony6.hadoop ...

  9. AngularJs 时间控件

    <div class="form-group col-sm-4 clearfix"> <label class="col-sm-5 control-la ...

  10. Xcode调用旧版本库出现Undefined symbols for architecture x86_64: ld: symbol(s) not found for architecture x86_64

    问题:Undefined symbols for architecture x86_64:   ld: symbol(s) not found for architecture x86_64 问题原因 ...