kafka笔记


  • 主题:Kafka maintains feeds of messages in categories called topics. 
      
  • 生产者:We’ll call processes that publish messages to a Kafka topic producers. 
         
  • 消费者:We’ll call processes that subscribe to topics and process the feed of published messages consumers. 
         
  • 代理(Broker):Kafka is run as a cluster comprised of one or more servers each of which is called a broker.

  • Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition。

生产者通过网路将消息发送到Kafka集群上,集群依次(轮流)服务消息到达消费者。 Kafka运行在一个集群中,集群中的每一个服务器就叫代理。




 Kafka保存所有(一段时间内的-可配置)已经发布的消息-无论它们是否已经被消费。例如,如果日志保留被设置为两天,那么在一个消息发布后,两天内它是可用的,两天后它将被丢弃到空闲空间


每个分区都有一个服务器它充当“leader”,而0到其他编号的服务器,作为“followers”。leader处理所有的读写请求,而followers被动地复制到leader。如果leader失败,其中一个“followers”将自动成为新的“leader”。 


Producers

生产者将数据发布到他们所选择的主题。生产者负责选择某个消息分配到某个主题的哪个partition。至于选择哪个分区可以简单的循环方式达到负载均衡,也可以者根据语义功能来分区。

Consumers

  每个消费者把自己标识到一个消费组,当每个消息发布到主题后,消息再投递到每个订阅消费组一个消费实例。消费者实例可以在不同的进程或不同的机器上。 

如果所有的消费者实例都有相同的消费组,那么这就像一个传统的队列。 

如果所有的消费者实例都有不同的消费组,那么这类作品就如发布订阅,所有的信息都被广播给所有的消费者。

然而,更常见的是主题有一个小数量的消费组,每一个为“逻辑订阅。每个组都是由许多消费实例,为了可扩展性和容错性。 

传统的队列在服务器上保留顺序消息,如果多个消费者从队列中消费,然后服务器将它们存储的消息按照顺序发送出去。然而,虽然服务器按照顺序发送消息,但是消息传递异步发送给消费者,所以消息到达消费者时可能失序了。这种高效意味着在并行消费过程中,消息的顺序丢失。消息传递系统经常围绕这个工作,有一个“exclusive consumer“的概念,它只允许一个进程从一个队列中消耗,但当然这意味着没有并行性处理的可能性。 
  Kafka做得更好。通过对主题进行分区,Kafka是既能保证顺序,又能负载均衡的消费。这是通过给主题进行分区,然后给消费组,使的每个分区都被组内唯一消费进程消费。通过这样做,我们确保消费进程是唯一的读取那个分区,并消费数据的顺序。请注意,在一个消费组中,不能有比分区更多的消费进程。

Kafka只在一个分区中的消息提供了一个总的顺序,而不是在一个主题中的不同分区之间的。然而,如果您需要一个完全有序的消息,这可以通过一个主题和一个分区来实现,显然这将意味着每一个消费组只有一个消费进程。 

Guarantees(保证)

Kafka给出了以下保证:

  • 生产者发送到一个特定主题的分区的消息,将被添加,并且发送是顺序的。
  • 各消费实例看到消息是顺序,并且存储在日志里。
  • 一个主题由N个复制备份,我们将容忍N-1服务器故障而不丢失任何信息提交到日志。 

源码例子,后续章节将贴上自己的

原文http://blog.csdn.net/likewindy/article/details/51740837


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值