最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下。

kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列。它主要由三个部分组成,producer,broker以及consumer。producer发布消息,broker存储消息,consumer接收消息。

发布消息的时候,producer会把它发送到broker的某一个topic上。每条消息都只属于一个topic,而一个topic会有一个或多个partition。那一条消息属于这个topic的哪一个partition会由一个key来决定。这个key既可以由用户定义,也可以由producer在发送的时候自己决定。

broker收到消息后会把它变为二进制形式添加到所属topic的log的最后。注意,Kafka只能在log最末尾添加新的消息,而不能在任意地方插入、删除或者编辑。然后broker会发送一个成功的消息给producer。由于broker的本质其实是一个zookeeper的集群,producer的消息其实会发给所有的broker。producer可以在发送的时候就定义发送成功的标准是收到任意一个broker的成功回复还是所有brokers还是大多数brokers的成功回复。

consumer接收消息的情况有些复杂。首先consumers会被分成不同的组。Kafka可以保证一条消息会被关注这个消息topic的每一个组中的一个且仅有一个consumer收到。这样用户就可以灵活的定义一个topic下的消息要被广播还是负载均衡了。两个极端情况:1,所有consumer都在一个group,那么broker相当于一个负载均衡器,每条消息会被送到不同的consumer;2,所有consumer都在不同group,那么相当于广播,每一条消息会被送给所有的consumer。其它情况都在这两者之间。

Kafka的配置也有些繁琐。为了使用Kafka,首先你得有一个Zookeeper。然后对于Consumer来说,必须给定topic和Zookeeper地址,其它还可以设一些timeout之类的东西。对于Producer来说,需要给定Brokers,Zookeeper地址,其它还可以设一些缓存大小,timeout之类的。如果你想结合Avro来使用Kafka,那么还必须为Consumer和Producer设置Avro Schema Registry的地址。Avro是一套很复杂的定义文件结构的系统,我会在之后的博客中提到。

那Kafka的基本使用就是这样了。有兴趣的可以去Apache官网下下来玩一玩。

Kafka笔记的更多相关文章

  1. Kafka笔记整理(三):消费形式验证与性能测试

    Kafka消费形式验证 前面的<Kafka笔记整理(一)>中有提到消费者的消费形式,说明如下: .每个consumer属于一个consumer group,可以指定组id.group.id ...

  2. Kafka笔记整理(一)

    Kafka简介 消息队列(Message Queue) 消息 Message 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列 Queue 一种特殊的线性表(数 ...

  3. Kafka笔记—可靠性、幂等性和事务

    这几天很忙,但是我现在给我的要求是一周至少要出一篇文章,所以先拿这篇笔记来做开胃菜,源码分析估计明后两天应该能写一篇.给自己加油~,即使没什么人看. 可靠性 如何保证消息不丢失 Kafka只对&quo ...

  4. kafka笔记-Kafka在zookeeper中的存储结构【转】

    参考链接:apache kafka系列之在zookeeper中存储结构  http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...

  5. Kafka笔记--指定消息的partition规则

    参数的设定:参考资料 不错的资料:http://blog.csdn.net/honglei915/article/details/37697655 http://developer.51cto.com ...

  6. Kafka笔记--监控系统KafkaOffsetMonitor

    KafkaOffsetMonitor下载链接: http://download.csdn.net/detail/changong28/7930337github官方:https://github.co ...

  7. Kafka笔记--使用ubuntu为bocker(服务器)windows做producer和comsumer(客户端)

    原文连接:http://www.cnblogs.com/davidwang456/p/4201875.html 程序仍然使用之前的一篇博文中的例子 :http://www.cnblogs.com/gn ...

  8. Kafka笔记--参数说明及Demo

    参考资料:http://blog.csdn.net/honglei915/article/details/37563647参数说明:http://ju.outofmemory.cn/entry/119 ...

  9. Kafka笔记--分布式环境搭建

    部署: http://www.cnblogs.com/likehua/p/3999538.html http://blog.csdn.net/kimmking/article/details/8263 ...

随机推荐

  1. mysql执行计划

         烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至关重要.下面我简单讲讲mysql的执行计划,只列出了一些常见的情况, ...

  2. mysql 动态新建以及删除分区表

    因为项目需要,最近研究了一下在mysql数据库下如何动态新建以及删除分区表.如果全部借助存储过程的话,新建以及删除分区表在逻辑上比较死板.不灵活,而且还容易出错.因此,我新建了一个数据表table_f ...

  3. hdu 4960 Another OCD Patient(dp)

    Another OCD Patient Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Ot ...

  4. python中strip,lstrip,rstrip简介

    一.起因 今天在做角色控制中,有一个地方用到rstrip,判断用户请求的url是否与数据库对应可用权限中url相符. if request.path == x.url or request.path. ...

  5. LeetCode 笔记系列六 Reverse Nodes in k-Group [学习如何逆转一个单链表]

    题目:Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. ...

  6. selenium结合sikuliX操作Flash网页

    sikuli的官网地址:http://www.sikuli.org 首先下载sikuliX的jar包:https://launchpad.net/sikuli/sikulix/1.1.0 java-d ...

  7. 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. java的构造方法

    当一个类a继承一个类b,类b继承类c,类c继承类d时, 先执行d的构造,然后c.b:当该执行a的构造时,如果有成员变量,就先执行成员变量,最后构造 子类继承父类,子类重写父类的某个方法,当父类构造时, ...

  9. C#类型转换运算符之 explicit implicit

    类型转换运算符 explicit和implicit用于声明用户定义的类型转换运算符,如果可以确保转换过程不会造成数据丢失,则可使用这两个关键字在用户定义的类型和其他类型之间进行转换. explicit ...

  10. 用jsmooth + inno生成exe并制作简单安装包

    思路: 先由 Jsmooth把jar和相关资源打包生成exe,再由Inno把exe和资源文件打成安装包 一  Jsmooth 1 下载 安装 Jsmooth   地址:jsmooth.sourcefo ...