wangzzu / awesome

不积硅步,无以至千里
227 stars 47 forks source link

Kafka 源码分析系列 #7

Closed wangzzu closed 6 years ago

wangzzu commented 7 years ago

这个系列以 0.10.2.0 为例(最新的版本 2.0.0 增加了事务性、重构了 Controller,代码变动很大)

wangzzu commented 7 years ago

Kafka Producer 端系列的源码分析,目前能想到的几个主题:

wangzzu commented 7 years ago

Kafka Consumer 端系列源码分析,分别以下几个部分来讲述(大概会分为5个):

wangzzu commented 6 years ago

Kafka Server 端的源码解析,主要分为以下三块来讲解(大概会有8篇左右的文章):

GroupCoordinator

存储层

Controller

这部分计划在 6.11 前讲述完。

Kafka Server 端

最后总述。

wangzzu commented 6 years ago

其它内容(包括后来的 new feature):

  1. producer 端如何实现不重(1.0.0代码)KIP-98 - Exactly Once Delivery and Transactional Messaging
  2. kafka 能否做到完全不丢(腾讯开源的一个 mq:微信开源PhxQueue:高可用、高可靠、高性能的分布式队列),或者有没有什么情况下kafka 即使做了不丢的设置,还是会有丢失的风险?
  3. Kafka 限流是如何做的?
wangzzu commented 6 years ago

马上就到2018.6.11了,这个小项目也算是立项一年了,庆幸的是自己能够坚持下来了,遗憾的时候没有在一年的时间内完成,后续其他的源码阅读要督促自己,保证总体按照计划去进行(立于2018.6.10)。

wangzzu commented 6 years ago

截至昨天晚上(2018-06-27),Kafka 源码解析系列23篇终于完成,主要是 client 与 core 部分的代码。

NeoTalk commented 5 years ago

你好,请问你这是哪个版本的kafka啊,我看kafka2.0,源码差别和你文章里的还是又挺大差别啊

wangzzu commented 5 years ago

@CoderCai 上面的文章是以 0.10.2.0 为例,Kafka 2.0 增加了事务性、重构 Controller,所以改动还是挺大的,后面我的几篇关于事务性的文章是以 2.0.0 为例

Anandonzy commented 5 years ago

为什么源码分析的文档看不了了

wangzzu commented 5 years ago

@Anandonzy 我这里可以打开的,你也可以看这里:http://matt33.com/tags/kafka/

Anandonzy commented 5 years ago

@Anandonzy 我这里可以打开的,你也可以看这里:http://matt33.com/tags/kafka/

不行啊,我打开还是无效的访问。。

wangzzu commented 5 years ago

@Anandonzy 我这里可以打开的,你也可以看这里:http://matt33.com/tags/kafka/

不行啊,我打开还是无效的访问。。

@Anandonzy 你是在国外访问的么?😂

VIPJoey commented 5 years ago

有没有遇到这种情况,我有一个topic,但有上百个消费者,只知道有个消费者A用了低版本的方式消费导致kafka server 报错,怎样快速定位这个有问题的消费者A?


java.lang.IllegalArgumentException: Magic v0 does not support record headers
        at org.apache.kafka.common.record.MemoryRecordsBuilder.appendWithOffset(MemoryRecordsBuilder.java:403)
        at org.apache.kafka.common.record.MemoryRecordsBuilder.append(MemoryRecordsBuilder.java:586)
        at org.apache.kafka.common.record.AbstractRecords.convertRecordBatch(AbstractRecords.java:134)
        at org.apache.kafka.common.record.AbstractRecords.downConvert(AbstractRecords.java:109)
        at org.apache.kafka.common.record.FileRecords.downConvert(FileRecords.java:253)
wangzzu commented 5 years ago

@VIPJoey 这个问题其实就是快速定位到一个恶意 client 的 ip,我们之前用到的方法是:使用阿里开源 arthas 工具,找到这个异常请求的 client ip。