Skip to content

Commit a00d5c4

Browse files
committed
change note
1 parent 7a7db16 commit a00d5c4

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed

docs/JavaMultiThread.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ http://cnblogs.com/wenjunwei/p/10573289.html
10131013

10141014
### 线程间怎么通信?
10151015

1016-
##### 1.synchronized锁
1016+
#### 1.synchronized锁
10171017

10181018
通过synchronized锁来进行同步,让一次只能一个线程来执行。
10191019

@@ -1387,7 +1387,8 @@ private static class Producer {
13871387

13881388
```java
13891389
public class BlockQueueRepository<T> extends AbstractRepository<T> implements Repository<T> {
1390-
public BlockQueueRepository() {
1390+
public BlockQueueRepository(int cap) {
1391+
//cap代表队列的最大容量
13911392
products = new LinkedBlockingQueue<>(cap);
13921393
}
13931394

docs/Kafka.md

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282

8383
- 前一条消息发送失败,后一条消息发送成功,前一条消息重试后成功,造成数据乱序。
8484

85+
http://www.jasongj.com/kafka/transaction/
86+
8587
##### 消费端幂等性
8688

8789
只能自己从业务层面保证重复消费的幂等性,例如引入版本号机制。
@@ -210,6 +212,7 @@ log.flush.scheduler.interval.ms 定期刷盘间隔
210212
可以通过设置 最大刷盘消息数量 和 最大刷盘时间间隔 来控制fsync系统调用的时间,但是Kafka不推荐去设置这些参数,希望让操作系统来决定刷盘的时机,这样可以支持更高的吞吐量。而且Kafka保证可用性是通过多副本来实现的,一个机器挂掉了就会选举副本作为leader。
211213
### Kafka什么时候进行rebalance?
212214
1.topic下分区的数量增加了或者减少了。(这个一般是我们手动触发的)
215+
213216
2.消费者的数量发生了改变,例如新增加了消费者或者有消费者挂掉了。
214217
Kafka有一个session.timeout.ms,最大会话超时时间,最长是10s。就是如果broker与消费者之间的心跳包超过10s还没有收到回应,就会认为消费者掉线了。以及还有一个max.poll.interval.ms参数,消费者两次去broker拉取消息的间隔,默认是5分钟。如果消费者两次拉取消息的间隔超过了5分钟,就会认为消费者掉线了。
215218

@@ -221,4 +224,30 @@ Kafka有一个session.timeout.ms,最大会话超时时间,最长是10s。就
221224

222225
2.可以自行在MySQL或者Redis里面存储每个分区消费的offset,然后消费者去一个新的分区拉取消息时先去读取上次消费的offset。
223226

224-
3.为消息分配一个唯一的消息id,通过消息id来判定是否重复消费了。
227+
3.为消息分配一个唯一的消息id,通过消息id来判定是否重复消费了。
228+
229+
##### kafka 1.1的优化
230+
231+
新版本新增了**group.initial.rebalance.delay.ms**参数。空消费组接受到成员加入请求时,不立即转化到PreparingRebalance状态来开启reblance。当时间超过**group.initial.rebalance.delay.ms**后,再把group状态改为PreparingRebalance(开启reblance),这样可以避免服务启动时,consumer陆续加入引起的频繁Rebalance。
232+
233+
##### Kafka2.3对reblance的优化
234+
235+
但对于运行过程中,consumer超时或重启引起的reblance则无法避免,其中一个原因就是,consumer重启后,它的身份标识会变。简单说就是Kafka不确认新加入的consumer是否是之前挂掉的那个。
236+
237+
在Kafka2.0中引入了静态成员ID,使得consumer重新加入时,可以保持旧的标识,这样Kafka就知道之前挂掉的consumer又恢复了,从而不需要Reblance。这样做的好处有两个:
238+
239+
1. 降低了Kafka Reblance的频率
240+
2. 即使发生Reblance,Kafka尽量让其他consumer保持原有的partition,减少了重分配引来的耗时、幂等等问题
241+
242+
https://blog.csdn.net/weixin_37968613/article/details/104607012
243+
244+
https://blog.csdn.net/z69183787/article/details/105138782
245+
246+
https://zhuanlan.zhihu.com/p/87577979
247+
248+
https://www.cnblogs.com/runnerjack/p/12108132.html
249+
250+
### kafka的选举机制
251+
252+
https://blog.csdn.net/qq_37142346/article/details/91349100
253+

docs/LeetCode1.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,10 +1549,15 @@ public int longestConsecutive(int[] nums) {
15491549
其实就是判断有向图是否存在环,有两种解法
15501550
##### 深度优先遍历
15511551
就是先根据二维数组构建一个邻接表,这里我们使用一个map来作为领接表,然后递归遍历map中的节点,对于图中每个节点有三种状态:
1552-
1.未被访问过(在statusMap中值为null)
1553-
2.已被访问过,并且它的子节点没有遍历访问完成(在statusMap中值为1)
1554-
3.已被访问过,并且子节点也遍历访问完成(在statusMap中值为2)
1552+
1553+
1.未被访问过(在statusMap中值为null)。
1554+
1555+
2.已被访问过,并且它的子节点没有遍历访问完成(在statusMap中值为1)。
1556+
1557+
3.已被访问过,并且子节点也遍历访问完成(在statusMap中值为2)。
1558+
15551559
在递归遍历过程中,遇到上面第2种节点,说明就存在环。
1560+
15561561
```java
15571562
public boolean canFinish(int numCourses, int[][] prerequisites) {
15581563
HashMap<Integer, List<Integer>> map = new HashMap<>();

0 commit comments

Comments
 (0)