[关闭]
@JunQiu 2018-09-18T21:12:45.000000Z 字数 2950 阅读 1101

kafka

summary_2018/08 messageQueue tools


1、日常

1.1、kafka


2、技术

2.1、kafka

2.1.1、kafka简介
2.1.2、kafka系统架构

  1. 定义:
  2. // Broker
  3. Kafka集群包含一个或多个服务器,这种服务器被称为broker
  4. // Topic
  5. 每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
  6. // Partition
  7. parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件
  8. // Producer
  9. 负责发布消息到Kafka broker
  10. // Consumer
  11. 消费消息。每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息。
2.1.3、 Push & Pull
  1. 作为一个messaging systemKafka遵循了传统的方式,选择由producerbroker push消息并由consumerbroker pull消息。
  2. push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。
2.1.4、 Topic & Partition
  1. Topic在逻辑上可以被认为是一个queue。每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以水平扩展,物理上把topic分成一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件。
  2. Tips1:每个分区都是一个有序的序列
  3. Tpis2:对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略去删除旧数据。一是基于时间,二是基于partition文件大小。例如可以通过配置$KAFKA_HOME/config/server.properties,让Kafka删除一周前的数据,也可通过配置让Kafkapartition文件超过1GB时删除旧数据.
  4. Tips3:因为Kafka读取特定消息的时间复杂度为O(1),即与文件大小无关,所以这里删除文件与Kafka性能无关,选择怎样的删除策略只与磁盘以及具体的需求有关。另外,Kafka会为每一个consumer group保留一些metadata信息–当前消费的消息的position,也即offset。这个offsetconsumer控制。正常情况下consumer会在消费完一条消息后线性增加这个offset。当然,consumer也可将offset设成一个较小的值,重新消费一些消息。因为offetconsumer控制,所以Kafka broker是无状态的,它不需要标记哪些消息被哪些consumer过,不需要通过broker去保证同一个consumer group只有一个consumer能消费某一条消息,因此也就不需要锁机制,这也为Kafka的高吞吐率提供了有力保障。      

2.1.5、 Consumer group(consumer hight level API)
2.1.6、 Replication
2.1.7、 Consumer Rebalance
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注