0


kafka基础知识

一、消息系统分类:

1、同步消息机制 与异步消息机制

2、消息传递方式:queue队列与topic主题

二者区别:

1)队列,可多个生产者,1个消费者,消费者请求队列,才可获取消费。若多个消费者监听,则 先来者优先。

2)topic,多个生产者,多个消费者。生产者发布消息到消费服务器的特定topic中,消费服务器自动广播,传递给凡是订阅此topic的消费者。无需消费者请求。

二、kafka体系结构

分布式系统,组成包含:Producer、Consumer、Broker及分布式协调服务 ZooKeeper.

1、基本概念:

1)Broker:Kafka集群包含1个或多个服务器,这种服务器简称Broker。

2)Topic:发不到kafka集群的消息类别【可理解为目录】

3)Partition:物理概念,文件夹,每个topic可以有1个或多个partition,即同一个分区可存在多个副本。

4)Producer:负责发布消息到kafka broker。

5)Consumer:向kafka broker 读取消息的客户端。

6)Consumer Group:每个condumer属于特定的consumer group,若不指定,则为默认的group。

2、Broker:

代理保存消息的中转站。

没有副本机制,一旦宕机,该Broker消息都将不可用。consumer可以追溯到任意位置 重新从Broker中进行消息的消费。

当Consumer故障时,可用从最小的offset重新读去消费消息。

3、topic、partition、副本:

1个partition只属于单个的topic。topic与partition关系:

1)同一个topic下的不同partition包含的消息不同。

2)offset:消息被追加到partition日志文件时,分配一个特定的偏移量(offset)。offset是消息在分区中的唯一标识,Kafka通过它来保证消息再Partition的顺序性。

3)offset不垮分区。即kafka保证partition有序,而不是topic有序。

topic是一个逻辑单位,可横跨在多个Broker上。

4、kafka容错功能

每个topic可以有多个partition,每个partition可以有多个的副本。每个副本中都只有1个leader,其他都是follower.且仅有leader副本可对外提供服务。一般leader和follower在不同broker上,这样某台宕机后,follower可迅速转正,这就是kafka的容错功能。

5、Producer:

Producer客户端由2个线程协调运行,主线程和发送(sender)线程。有3种方式发送消息:

1)fire-and-forget:把消息发送给服务器后,不关心结果。大多数情况下,消息会正常到达,不过一旦失败,produer会自动重试,但若出错了,服务器是无感知的。适用于可丢失消息,对吞吐量要求较大的业务。

  1. 同步发送:使用send发送一条消息,会返回一个future,调用get方法会阻塞当前线程,等待返回。适用于可靠性较高的场景,如支付,如果消息丢失,则阻断业务(或回滚)。

3)异步发送:使用send发送一条消息后指定回调函数,在broker返回结果时调用。回调函数可进行错误日志记录或重试。此方法牺牲一部分可靠性,但吞吐量比同步发送高很多。

KafkaProducer对象创建一个ProducerRecord对象。代表producer发送到kafka服务器的一个消息对象:key-value对。ProducerRecord对象包含如下消息:

1)Kafka服务端的主题名称

2)Topic中可选的分区号【非必填】

3)时间戳【取决于topic的配置,配置有两种:Createtime 或logAppendTime】

  1. 其他key-value对。

ProducerRecord经过主线程后,最终由发送线程发送给kafka服务器端。KafkaBroker在收到消息时会返回一个响应,如果写入成功,会返回一个RecordMetaData对象。

RecordMetaData对象记录topic、 partition、分区里的偏移量offset及上面的两种时间戳类型。如果写入失败,会返回一个错误。Producer收到错误信息会重新发送。几次失败仍然错误,就返回错误信息。

6、consumer与consumer group:

1个consumerx消费容易堆积,so group。

规则:

1)1个partition仅能被1个consumer group中的1个consumer消费,同时可被不同consumer group中的consumer消费.

2)1个consumer group中的consumer 可同时消费1个topic中的不同partition。

消费方式:pull

每个consumer自己维护自己的消费状态。并且每个人consumer互相独立顺序地pull每个分区的消息。consumer通过偏移量的信息控制kafka中的消费消息。

特殊说明:当consumer最新写入的消息未达到备份要求时,即写入的消息未达到冗余度要求时,consumer是不可见的,只可消费到水平线的位置。

概念理解:

1)leo :log end ofset,表示topic的partition的每个副本日志中最后一条消息的位置。

2)高水位线指topic的 partition的每个副本对应的最小LEO的值。

由于每个partition的副本都是自己的LEO,因此consumer在消费消息时,最多消费到高水位线所在的位置。即producer写入新消息后 不会立即消费,leader会等待该消息被所有副本都同步后,再更新高水位线位置,这样consumer才能消费producer新鞋入的消息。避免leader所在的broker宕机后,该消息仍可以被新的leader中获取。

。。。。....

三、kafka核心原理解析

四、kafka与flume

五、Kafka与SparkStreaming

六、Kafka与Flink DataStrea m

标签: kafka 分布式

本文转载自: https://blog.csdn.net/xiaoruirui1294/article/details/136176593
版权归原作者 东方129 所有, 如有侵权,请联系我们删除。

“kafka基础知识”的评论:

还没有评论