Git Product home page Git Product logo

learning's People

Watchers

James Cloos avatar ScottWei avatar

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 photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.