阿帕契·卡夫卡笔记
阅读《卡夫卡权威指南》时的个人笔记。
我打算接下来进行一些补充
特点
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请求/心跳来完成的。