8000 fix: update kafka offsets description · cloudhuang/advanced-java@d8ae1ae · GitHub
[go: up one dir, main page]

Skip to content

Commit d8ae1ae

Browse files
committed
fix: update kafka offsets description
1 parent 1fafc71 commit d8ae1ae

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

docs/high-concurrency/how-to-ensure-that-messages-are-not-repeatedly-consumed.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一
1818

1919
举个栗子。
2020

21-
有这么个场景。数据 1/2/3 依次进入 kafka,kafka 会给这三条数据每条分配一个 offset,代表这条数据的序号,我们就假设分配的 offset 依次是 152/153/154。消费者从 kafka 去消费的时候,也是按照这个顺序去 5E9E 消费。假如当消费者消费了 `offset=153` 的这条数据,刚准备去提交 offset 到 zookeeper,此时消费者进程被重启了。那么此时消费过的数据 1/2 的 offset 并没有提交,kafka 也就不知道你已经消费了 `offset=153` 这条数据。那么重启之后,消费者会找 kafka 说,嘿,哥儿们,你给我接着把上次我消费到的那个地方后面的数据继续给我传递过来。由于之前的 offset 没有提交成功,那么数据 1/2 会再次传过来,如果此时消费者没有去重的话,那么就会导致重复消费。
21+
有这么个场景。数据 1/2/3 依次进入 Kafka,Kafka 会给这三条数据每条分配一个 offset,代表这条数据的序号,我们就假设分配的 offset 依次是 152/153/154。消费者从 Kafka 去消费的时候,也是按照这个顺序去消费。假如当消费者消费了 `offset=153` 的这条数据,刚准备去提交 offset 到 Zookeeper,此时消费者进程被重启了。那么此时消费过的数据 1/2 的 offset 并没有提交,Kafka 也就不知道你已经消费了 `offset=153` 这条数据。那么重启之后,消费者会找 Kafka 说,嘿,哥儿们,你给我接着把上次我消费到的那个地方后面的数据继续给我传递过来。由于之前的 offset 没有提交成功,那么数据 1/2 会再次传过来,如果此时消费者没有去重的话,那么就会导致重复消费。
22+
23+
注意:新版的 Kafka 已经将 Offset 的存储从 Zookeeper 转移至 Kafka brokers,并使用内部位移主题 `__consumer_offsets` 进行存储。
2224

2325
![mq-10](./images/mq-10.png)
2426

0 commit comments

Comments
 (0)
0