<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[predisw的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/predisw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; predisw]]></copyright><item><title><![CDATA[两阶段提交 (two phase commit - 2PC)]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148850467</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148850467</guid><author>predisw</author><pubDate>Mon, 23 Jun 2025 17:11:58 +0800</pubDate><description><![CDATA[摘要：两阶段提交(2PC)是一种分布式事务协议，确保多节点操作的原子性。2PC通过协调者(coordinator)管理事务流程：第一阶段准备请求询问各节点能否提交，第二阶段根据节点响应决定最终提交或中止。关键特性包括：参与者回复&quot;Yes&quot;后不可撤销、协调者决策写入磁盘后不可撤销。2PC的容错机制要求协调者故障恢复后通过事务日志确定未决事务状态。该协议解决了分布式环境下的数据一致性问题，但存在协调者故障时参与者阻塞等待的问题。]]></description><category></category></item><item><title><![CDATA[如何实现一个64 bit ID Unique Generator]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148775913</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148775913</guid><author>predisw</author><pubDate>Thu, 19 Jun 2025 21:33:27 +0800</pubDate><description><![CDATA[这个时候就可以重新读取parent 节点下所有的子节点list，然后比较parent节点的value来去掉value 中已经不存在的mapping信息对，并且排序查看那个worker ID对应的mapping 信息被去掉了，那就重新使用这个已经不存在mapping信息的 worker ID 来关联本session. 这样就可以达到复用 worker ID 的目标了。当实例或者说pod 重启之后，client 重新申请ID 时，可以被分配到没有被使用的ID 或者是接着之前用的ID 段的新ID.]]></description><category></category></item><item><title><![CDATA[kafka consumer group rebalance]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148451932</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148451932</guid><author>predisw</author><pubDate>Thu, 05 Jun 2025 15:30:27 +0800</pubDate><description><![CDATA[之所以会产生 stop-the-world 是因为所有的consumer 都需要重新assign partition, 所以traffic 需要停掉。避免这种情况可以配置这种 assignment strategy. 这中strategy is an extension of设置这种assignment strategy设置调整。]]></description><category></category></item><item><title><![CDATA[Kafka broker 写消息的过程]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148432252</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148432252</guid><author>predisw</author><pubDate>Wed, 04 Jun 2025 18:18:14 +0800</pubDate><description><![CDATA[Kafka的消息写入流程主要包含四个步骤：生产者发送消息到Broker，消息根据键或轮询策略分配到分区并顺序写入磁盘日志（不依赖内存缓存），通过副本机制确保容错性（根据acks配置等待确认），最后消费者按偏移量顺序读取消息（最近数据可能从OS页面缓存获取）。消息会保留指定时间（如7天）而非消费后立即删除。整个过程注重磁盘顺序写入和高效读取，利用OS缓存提升性能。]]></description><category></category></item><item><title><![CDATA[HashMap 的理解]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148340202</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148340202</guid><author>predisw</author><pubDate>Fri, 30 May 2025 16:08:59 +0800</pubDate><description><![CDATA[即将key-value 存在一个列表中，然后根据key 的计算出的hash值(散列值)作为这个其在列表中的index。这样就可以通过 list[index] 直接读取这个key-value 了，而不需要列表所有元素。这里有一个问题就是，如果多个key 计算出来的hash 值一样，那么就存在位置重复的问题。像这样，不同的数据拥有相同散列值的情况，被称为“冲突”。解决的方法一般有链地址法（chaining）和开放地址法 （open addressing）两种。]]></description><category></category></item><item><title><![CDATA[kafka 常用命令]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148085104</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148085104</guid><author>predisw</author><pubDate>Tue, 20 May 2025 12:08:15 +0800</pubDate><description><![CDATA[【代码】kafka 常用命令。]]></description><category></category></item><item><title><![CDATA[kakfa 基本了解]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148084789</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148084789</guid><author>predisw</author><pubDate>Tue, 20 May 2025 11:57:19 +0800</pubDate><description><![CDATA[client producer根据record 的 key 的hash 来分配topic 的partition. 如果没有key则round-robin 分配partition。data plane 就是broker，control plane 旧的就是zookeeper，新的是 kRaft contorller。kafka 的message 是可以被多次消费的，不是消费后就被删除，而是通过 retention policy 来控制的。只是存储messages 的 topic partition 有。]]></description><category></category></item><item><title><![CDATA[kafka 知识点]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148084332</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148084332</guid><author>predisw</author><pubDate>Tue, 20 May 2025 11:33:55 +0800</pubDate><description><![CDATA[【代码】kafka 知识点。]]></description><category></category></item><item><title><![CDATA[kafka 问与答]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/148060150</link><guid>https://blog.youkuaiyun.com/predisw/article/details/148060150</guid><author>predisw</author><pubDate>Mon, 19 May 2025 11:51:16 +0800</pubDate><description><![CDATA[client 只需要知道一部分nodes(brokers)的地址既可以，client 会自动发现剩下的所有topic partition leader nodes, 然后连接上。]]></description><category></category></item><item><title><![CDATA[Kafka如何实现高性能]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147984157</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147984157</guid><author>predisw</author><pubDate>Thu, 15 May 2025 15:20:48 +0800</pubDate><description><![CDATA[Kafka通过多层次的架构设计和优化实现了高性能消息传递。首先，在存储层，Kafka采用顺序I/O设计、零拷贝技术和页缓存利用，显著提升了数据读写效率。其次，在网络层，Kafka使用Reactor网络模型和批量压缩传输，优化了网络通信性能。此外，Kafka通过分区并行机制和轻量级broker设计，增强了系统的并发处理能力和可扩展性。这些优化措施使得Kafka能够处理每秒数百万条消息，并实现毫秒级延迟，成为高性能消息系统的标杆。]]></description><category></category></item><item><title><![CDATA[kafka connect 大概了解]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147960755</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147960755</guid><author>predisw</author><pubDate>Wed, 14 May 2025 18:44:07 +0800</pubDate><description><![CDATA[Kafka Connect 是 Apache Kafka 的一个组件，用于实现数据集成，支持将数据从数据库、文件系统等外部系统导入 Kafka，或将 Kafka 数据导出到其他系统。其核心概念包括 Kafka Worker（独立实例）、Kafka Connector（数据搬运器，分为 Source 和 Sink 两种类型）和 Kafka Connect Plugin（实现 Connector 的代码包）。通过配置 Connector 和安装 Plugin，用户可以轻松实现数据集成。Kafka Connect]]></description><category></category></item><item><title><![CDATA[Kafka集群加入新Broker节点会发生什么]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147833076</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147833076</guid><author>predisw</author><pubDate>Fri, 09 May 2025 17:09:52 +0800</pubDate><description><![CDATA[当向Kafka集群添加新的Broker节点时，新Broker会自动注册到ZooKeeper并同步集群元数据，成为Controller选举的候选者。然而，现有分区不会自动迁移到新Broker，需要管理员手动触发分区重平衡或配置自动平衡。管理员可以通过生成和执行迁移计划，或启用自动平衡配置来优化分区分布。新Broker的加入会带来轻微的性能影响，尤其是在分区迁移期间，但也会提升集群的总存储容量。最佳实践建议包括逐个加入节点、监控关键指标，并在加入后进行必要的优化操作。这些步骤确保新Broker的资源能够被充分利]]></description><category></category></item><item><title><![CDATA[kafka leader traffic 重平衡]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147824956</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147824956</guid><author>predisw</author><pubDate>Fri, 09 May 2025 15:00:53 +0800</pubDate><description><![CDATA[在Apache Kafka中，leader imbalance（领导者不平衡）可能导致某些broker成为瓶颈，因为它们承载了过多的分区领导者。为了解决这个问题，可以通过以下几种方法重新平衡broker流量： 自动领导者重平衡（Kafka 2.4+）：启用auto.leader.rebalance.enable，Kafka会定期检查并重新分配领导者。 手动领导者选举：使用kafka-preferred-replica-election.sh脚本，将分区领导者重新分配到首选副本。 完全分区重新分配：通过kaf]]></description><category></category></item><item><title><![CDATA[kafka logs storage]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147793384</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147793384</guid><author>predisw</author><pubDate>Thu, 08 May 2025 14:57:25 +0800</pubDate><description><![CDATA[特性说明顺序追加高效写入磁盘可被删除或压缩支持灵活的数据生命周期管理可快速索引查找借助.index和.timeindex实现高效定位有助于持久性和故障恢复数据持久化到磁盘，可随时恢复。]]></description><category></category></item><item><title><![CDATA[kafka records deletion policy]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147785029</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147785029</guid><author>predisw</author><pubDate>Thu, 08 May 2025 11:59:21 +0800</pubDate><description><![CDATA[名称是否写入？是否压缩？说明✅ 是❌ 否当前活跃写入的 segment❌ 否✅ 是可压缩的旧 segment❌ 否❌ 否已压缩过的数据段。]]></description><category></category></item><item><title><![CDATA[大O记法(O Notation)]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147731618</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147731618</guid><author>predisw</author><pubDate>Tue, 06 May 2025 11:58:17 +0800</pubDate><description><![CDATA[大O记法是计算机科学中用于描述算法时间复杂度和空间复杂度的数学符号表示法，它描述了算法性能如何随输入规模增长而变化。]]></description><category></category></item><item><title><![CDATA[垃圾收集GC的基本理解]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147637030</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147637030</guid><author>predisw</author><pubDate>Wed, 30 Apr 2025 17:21:03 +0800</pubDate><description><![CDATA[分代回收通过减少 GC 中扫描的对象数量，达到缩短 GC 带来的平均中断时间的效果。不过由于还是需要进行大回收，因此最大中断时间并没有得到什么改善。从吞吐量来看，在对象寿命假说能够成立的程序中，由于扫描对象数量的减少，可以达到非常不错的成绩。但是，其性能会被程序行为、分代数量、大回收触发条件等因素大幅度左右。G1 的描述里就提到 分代，增量，并行等概念。而 evacuation 也是类似 复制收集算法，只是基于G1的regions做了优化。Evacuation。]]></description><category></category></item><item><title><![CDATA[What is oauth2]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/147309315</link><guid>https://blog.youkuaiyun.com/predisw/article/details/147309315</guid><author>predisw</author><pubDate>Thu, 17 Apr 2025 16:45:05 +0800</pubDate><description><![CDATA[Oauth2 设计的目的是为了可以让用户不用提供用户名密码给第三方，也能让第三方可以访问用户的resource。例如 一个app 可以用微信登录，那就是指这个app会获取用户的微信name, logo 之类的信息去创建用户并登录。当用户点击使用微信登录时，app会弹出微信授权的扫描界面，当用户打开微信扫描后，用户就可以登录这个app 了。用户扫描微信授权的二维码，这个动作意味着一 用户已经登录了微信，即完成了authentication;]]></description><category></category></item><item><title><![CDATA[请求是如何通过k8s service 路由到对应的pod]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/144915509</link><guid>https://blog.youkuaiyun.com/predisw/article/details/144915509</guid><author>predisw</author><pubDate>Fri, 03 Jan 2025 18:06:55 +0800</pubDate><description><![CDATA[在kubernetes 中，请求在访问service时，是如何被路由到最终目pod的。]]></description><category></category></item><item><title><![CDATA[Java 线程池如何实现 -- 解读 ThreadPoolExecutor]]></title><link>https://blog.youkuaiyun.com/predisw/article/details/144889499</link><guid>https://blog.youkuaiyun.com/predisw/article/details/144889499</guid><author>predisw</author><pubDate>Thu, 02 Jan 2025 16:26:49 +0800</pubDate><description><![CDATA[ThreadPoolExecutor 源码分析线程池如何实现]]></description><category></category></item></channel></rss>