learning's People
learning's Issues
kafka学习记录1
-
Apache Kafka是基于发布/订阅的消息系统,它往往也被描述为分布式提交日志系统或者分布式流式处理系统。 发布/订阅是这么一种模式:消息(message)的发送者(publisher)不直接把消息发送给接收者,它只是以某种方式将消息分类,而接收者(subscriber)订阅特定类型的消息。发布/订阅系统通常有一个中间代理(broker)作为中间节点来协调这个过程。很多使用发布订阅系统的场景都是相同的:只是想要一个简单的消息队列或者进程间通信的通道。
-
Kafka的内部数据单元称为消息,消息类似于数据库中的一行或者一条记录。每个消息都有一个可选的元数据(metadata),称为键值(key),当消息被写到分区(partition)时,消息的键值可以控制这个分派的过程。最简单的做法是对这个键值进行哈希,把得到的哈希值对分区数量进行取模,来决定消息分派到哪个分区。这样可以保证拥有相同键值的消息可以被写入同一个分区。为了更高效,消息以批量提交的方式来写入Kafka。这些批量的消息都拥有相同的主题(topic)和分区(Partition)。
-
在Kafka中,消息以主题(topic)来分类,主题的概念类似于数据库的表。主题可以分成多个分区(partition),一个分区对应于一个单独的日志。消息不断追加到日志的末尾,在读取时从头到尾按序读取。一个主题通常有几个分区,分区内部有序,但分区相互之间不保证顺序。分区可以分布在不同的机器上,这也就意味着一个主题可以水平扩展到多个机器,以提供冗余度和横向扩展性。
-
生产者(也称为发布者)创建消息,通常来说生产者不关心消息被写入到哪个分区,在默认情况下Kafka会将消息均衡分配到所有的分区。但在某些情况下我们可能希望控制消息的分配,这可以通过消息键值和分配器(partitioner)来完成,分配器会对键值进行哈希并将消息分配到特定分区,这保证了拥有相同键值的消息会被分配到相同的分区。
-
消费者(也称为订阅者)读取消息,通常订阅一个或多个主题。在读取时,消费者记录当前已经读取的消息位移(offset)。位移是一个持续增长的整数值,分区内部的每个消息具有唯一的位移值。通过记录每个分区的已读取消息的位移(可以在Zookeeper或者Kafka内部记录),消费者可以停止或者重启而不丢失消费位置。消费者以消费组(consumer group)来工作,消费组包含一个或多个消费者,它们一起协作来消费同一个主题的消息。消费组保证主题内一个分区只被消费组内的一个消费者来消费。
-
一个Kafka服务器也称为broker,它接收生产者的消息并赋予其位移值,然后写入到磁盘;broker同时服务消费者拉取分区消息的请求,返回目前已经提交的消息。若干个broker组成一个集群(cluster),其中集群内某个broker会成为集群控制器(cluster controller),它负责管理集群,包括分配分区到broker、监控broker故障等。在集群内,一个分区由一个broker负责,这个broker也称为这个分区的leader;当然一个分区可以被复制到多个broker上来实现冗余,这样当存在broker故障时可以将其分区重新分配到其他broker来负责。
-
Kafka的一个关键性质是日志保留(retention),我们可以配置主题的消息保留策略,譬如只保留一段时间的日志或者只保留特定大小的日志。当超过这些限制时,老的消息会被删除。我们也可以针对某个主题单独设置消息过期策略,这样对于不同应用可以实现个性化。
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.