CHuiL

kafka客户端消费者

客户端消费者 java示例代码 public class KafkaConsumerAnalysis { public static final String brokerList = "HOSTNAME:9092"; public static final String topic = "quickstart-events"; public static fina...

数据存储

日志数据 kafka中的数据,是以log文件存储在磁盘上的,具体的说,一个主题有多个分区,每个分区对应一个Log日志,但是不是一个文件,每个log日志又拆分为多个logsegment文件,每次往一个分区追加日志时,只会追加到最新的那个logsegment文件上,前面的logsegment文件不会变动。 logsegment日志具体分为3个文件,一个log文件,和两个索引文件。他们以2...

Spring循环依赖注入,依赖的Bean增强导致循环依赖抛异常

spring依赖注入

spring 通过缓存解决循环依赖 Spring解决循环依赖的原理,其实就是依靠对象创建的中间状态。我们一个对象实例的创建,其实是可以分为实例化,然后在初始化。实例化就是分配了内存空间,引用已经指向了该内存的地址,该对象可以正常被引用了。不过此时还没有初始化,也就是内存空间中的数据还没有初始化。 class A { B b; public A() { b ...

kafka客户端生产者

客户端发送消息 java代码连接简单示例 public class KafkaProducerAnalysis { public static final String brokerList = "HOSTNAME:9092"; public static final String topic = "quickstart-events"; public stat...

Fdd鹰眼系统日志链路追踪原理

鹰眼系统日志信息能够将分布式调用链上产生的日志信息串联起来,最主要归功于打印出了traceId。 一个普通的请求,在分布式微服务环境下,可能又调用了很多微服务来完成该请求。不同的服务散落在不同的机器上,日志数据也可能保持在各自的机器上,就算将它们汇总在一个文件上,由于日志数据庞大,一条日志的前后可能都是毫不相干的日志信息。根本无法做到跟着请求的调用日志来排查问题。 但是如果有一个唯一标识来...

zookeeper典型应用场景

zookeeper依靠他对znode操作事务的原子性和顺序性,可以用来帮助实现 数据订阅和发布 负载均衡 命名服务 集群管理 Master选取 全局唯一ID 分布式锁 分布式队列 其中大部分都是依靠znode的特性,如唯一性,临时节点和watcher通知机制。 数据订阅和发布就1是将配置数据写入到znode上,并且关系该值的客户端可以watch该节点,...

ZAB-Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)

[TOC] zk的分布式模式同样是主从的模式,会有一个主节点(leader)处理所有的写操作,然后利用消息广播同步到所有从节点,客户端可以在所有的节点上提交写请求,只是提交到从节点的写请求会被转发主节点执行。 崩溃恢复是在主节点不可用之后,先进行leader选举,然后同步数据的过程。在这个过程中将不会执行新的写请求,知道崩溃恢复之后重新进入消息广播阶段。 消息广播 ZAB 协议的消息广...

zookeeper简介

[TOC] 简介 ZooKeeper is a high-performance coordination service for distributed applications. It exposes common services - such as naming, configuration management, synchronization, and group servic...

java实现单例模式的几种方式

设计模式

定义:使用该模式创建的类只有一个实例,且是在该类中实例化他自己并向系统提供该实例 使用场景要求只有一个对象的场景 饿汉模式 在加载该类的时候便实例化该类,换句话说,在声明的时候就实例化了。 饿汉模式由于一开始就创建了,所以并不存在并发安全问题。 public class Singleton{ private static Singleton instance = ne...

字符串相关算法

[TOC] 相关操作 输入操作 public class Test03 {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         System.out.println("1.录入信息 0.退出");         int n = scann...