摘要:
深入理解Kafka的Broker Kafka是一种高吞吐量的分布式发布订阅消息系统,它从设计原理方面进行了详尽的考虑,主要表现在以下几个方面。 高吞吐量,支持大量数据的事件流。 支持消息数据的可靠传送,能够处理积压的大量数据 支持低延迟的消息传递。 支持系统的自动容错。 通过 Topic的分区,支持 阅读全文
摘要:
Kafka的消费者 Kafka采用消费者组的方式来消费消息,一个消费者组中可以包含多个消费者。消费者对象订阅主题并接收Kafka的消息,然后验证消息并保存结果。尽管一个消费者组中可以包含多个消费者,但是它们订阅的都是同一个主题的消息。 1. 消费模式 当生产者将消息发送到Kafka集群后,会转发给消 阅读全文
摘要:
Kafka的生产者 1. 生产者的执行流程 生产者客户端由两个线程协调运行,这两个线程分别为主线程和Sender线程(发送线程),其中, 在主线程中由KafkaProducer创建消息,然后通过可能的拦截器、序列化器和分区器的作用之后缓存到消息累加器(RecordAccumulator,也称消息收集 阅读全文
摘要:
重入锁ReentrantLock 重人锁ReentrantLock,顾名思义,就是支持重进人的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进人,但是在调lock 阅读全文
摘要:
package com.strind.jucdemo; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concu 阅读全文
摘要:
Java中的锁 1. 顶级接口Lock Java SE5之后并发包中新增了Lock接口,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchro 阅读全文
摘要:
流量治理 在服务发现、网关路由等支持下,踏出了服务化的第一步以后,很可能仍会经历一段阵痛期,随着拆分出的服务越来越多,随之而来会面临以下两个问题的困扰: 由于某一个服务的崩溃,导致所有用到这个服务的其他服务都无法正常工作,一个点的错误经过层层传递,最终波及到调用链上与此有关的所有服务,这便是雪崩效应 阅读全文
摘要:
微服务起步 采用服务来构建程序,获得的收益是软件系统“整体”与“部分”在物理层面的真正隔离,这对构筑可靠的大型软件系统来说无比珍贵,但另一面,微服务架构在复杂性与执行性能方面做出了极大的让步。在一套由多个微服务相互调用才能正常运作的分布式系统中,每个节点都互相扮演着服务的生产者与消费者的多重角色,形 阅读全文
摘要:
事务处理几乎在每一个信息系统中都会涉及,它存在的意义是为了保证系统中所有的数据都是符合期望的,且相互关联的数据之间不会产生矛盾,即数据状态的一致性。按照数据库的经典理论,要达成这个目标,需要三方面共同努力来保障。 原子性(Atomic):在同一项业务处理过程中,事务保证了对多个数据的修改,要么同时成 阅读全文
摘要:
线程安全与锁优化 1. 线程安全 什么是线程安全: 《 Java 并发编程实战(Java Concurrency In Practice)》的作者 Brian Goetz为“线程安全”做出了一个比较恰当的定义:“当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需 阅读全文