快速了解Kafka

2016-10-04|来源:

什么是kafka

kafkaLinkedIn开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目。在它的主页描述kafka为一个高吞吐量的分布式(能将消息分散到不同的节点上)MQKafka仅仅由7000Scala编写,据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。

kafka目前支持多种客户端语言:javapythonc++php等等。

kafka集群的简要图解如下,producer生产消息,consumer消费消息:




kafka设计目标

高吞吐量是其核心设计之一。

数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能。

zero-copy:减少IO操作步骤。

支持数据批量发送和拉取。

支持数据压缩。

Topic划分为多个partition,提高并行处理能力。



kafka名词解释和工作方式

Producer:消息生产者,就是向kafka broker发消息的客户端

Consumer:消息消费者,向kafka broker取消息的客户端

Topic:可以理解为一个队列。

Consumer GroupCG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CGtopic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个CG只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic

Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic

Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的idoffset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

Offsetkafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka



kafka和zookeeper的关系

Producer端使用zookeeper用来"发现"broker列表,以及和Topic下每个partition leader建立socket连接并发送消息.

Broker端使用zookeeper用来注册broker信息,已经监测partition leader存活性.

Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息.



kafka系统扩展性

kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producerconsumer)的配置。broker会在zookeeper注册并保持相关的元数据(topicpartition信息等)更新。

而客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。



相关问答

更多

kafka集群是否启动成功?

你的问题在于如何让一个程序一直在后台运行,还是只是窗口运行, (1)如果要kafka进程一直常驻并且在后台不关闭,启动如下: cd /home/kafka/kafka_2.10-0.9.0.0/ nohup bin/kafka-server-start.sh config/server.properties & (2)如果只是想窗口运行,启动如下: cd /home/kafka/kafka_2.10-0.9.0.0/ bin/kafka-server-start.sh config/server. ...

kafka脱离了zookeeper可以集群吗

不可以,kafka必须要依赖一个zookeeper集群才能运行。kafka系群里面各个broker都是通过zookeeper来同步topic列表以及其它broker列表的,一旦连不上zookeeper,kafka也就无法工作。

JAVA快速入门的方法

作为师兄的,也来给你说两句! 首先,你们那本书好像有九章! 每章都大概是什么内容!你要心里有个底!这些都是大概! 其次就是java编程的构思! java有个api文档,也不大,很多个版本。htm,chm都有 中文英文都有,你要学会用这个东西! 各种方法都在里面,因此会了api,只要你想的到的构思,相信你用api都可以找到 那样看各种函数方法之类的,就很简单了!

mysql传入到Kafka中的数据结构如何查看

private function loaderHandler(event:*):void { switch(event.type) { case Event.COMPLETE: trace(_loader.data.result); break; case Event.OPEN: trace("open: " + event); break; case ProgressEvent.PROGRESS: trace("progress: " + event); break;

如何使用JMX监控Kafka

Jafka/Kafka Kafka是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。 具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化; 高吞吐,在一台

kafka分布式消息队列

相关文章

更多

最近更新

更多