阿帕契·卡夫卡笔记

阅读《卡夫卡权威指南》时的个人笔记。

我打算接下来进行一些补充

特点

Apache Kafka是在LinkedIn上启动的流处理框架。

提到了以下几个最初的目标。

    • push-pullモデルによって、producerとconsumerを疎結合にする

 

    • メッセージの永続性

 

    • 高スループット

 

    水平スケール

在Guide中,建议使用Avro作为序列化格式。

2015年8月的时候,领英每天

    • 1兆メッセージのproduce

 

    ペタバイト超のconsume

听说是使用这个。真是惊人的规模。

基本用語/概念 ➜ 基本词汇/概念

主题

将消息进行分类的单位。

如果是访问分析系统的话,可能会有类似于浏览量/点击量/转化量等单位。

消息将以附加方式仅对主题进行写入。

分割

将被分散的主题单元称为“partition”。

这个话题的分区数量只能增加。

将分区数设置为Kafka集群中的broker数量或其倍数,以实现有效的分散。

经纪人

将一个Kafka服务器称为代理。

制片人 (zhì

对于主题,我们将写进消息的Kafka客户端称为生产者。

默认情况下,不指定分区并均匀地写入所有分区,但也可以通过分区器进行明确指定。这一特点类似于Spark。

消费者 zhě)

从主题中读取消息的Kafka客户端被称为消费者。

在partition内,每个message都具有唯一的offset,通过使用这个offset,可以跟踪消费的进度。

订阅同一主题的消费者属于同一消费者组。

Kafka集群的尺寸设计

从下面的内容计算出来

    • messageを保持するために必要なdisk space

 

    必要となるスループットと、一台あたりの処理可能なnetwork capacity

制作人 (zhì zuò

制作人员的详细信息。

对KafkaProducer实例执行操作。

如果想要提高写入吞吐量,可以从多个线程中调用send函数。

消息的撰写方法有以下三种。

    • Fire-and-forget

sendを呼び出し、返値を無視する

Synchronous

sendで返されるFutureを同期的に待ち受ける

Asynchronous

callbackとともにsendを呼び出す

制片人的设定

致谢

为了判断发送是否成功,需要请求多少个分区副本的写入成功来表示。

    • acks=0

brokerからのresponseを待たずに成功と判断する。もっともスループットは出るが、messageがロストしうる

acks=1

leader replicaへの書き込み成功を待つ。leaderがcrashして他のreplicaがleader選出された場合にはmessageがロストしうる

acks=all

全replicaへの書き込み成功を待つ

我对LinkedIn在这方面具体是如何利用哪些日志以及在哪些应用中运营,感到很好奇。

消费者

消费者的详细信息。

如果想提高对某个主题的消费者吞吐量,在消费者组中添加消费者。

即使在consumer group中有超过topic分区数的消费者,也是没有意义的(只有一些会处于空闲状态)。

如果希望在多个应用程序中订阅相同的主题,可以在每个应用程序中准备消费者组。

重新平衡

当消费者进行添加/删除操作时,将进行分区的重新均衡。

在重新平衡的过程中,消费将无法进行,因此会发生一些停机时间。

消费者的添加/删除是通过与代理人的群协调者进行API请求/心跳来完成的。

创建消费者

提交/抵消

bannerAds