ZooKeeper

kafka消息丢失

末鹿安然 提交于 2021-01-06 11:31:20
在处理生产环境问题的过程中发现12号那天某kafka集群有少量的数据丢失,概率大致在千万分之三。 数据写入kafka之后,就完全消失了,消费者完全没有消费到这个数据。 通过找到那天的数据,查看有问题的数据在写入kafka的时候上下文应用日志发现有少量以下报错: [2019-10-12 11:03:43,xxx] This is not the correct coordinator. 理论上正常情况下kafka是不太可能丢数据的,如果出现这种情况,必然是开发人员或者硬件引发了什么问题,因为写入日志是有的,看了下应用配置 acks=1 马上意识到,问题突破口应该在这里。 acks=0 生产者能够通过网络吧消息发送出去,那么就认为消息已成功写入Kafka,一定会丢失一些数据 acks=1 master在疏导消息并把它写到分区数据问津是会返回确认或者错误响应,还是可能会丢数据 acks=all master在返回确认或错误响应之前,会等待所有同步副本都收到消息 可能以前是为了保证性能够快,选择了折中的应用配置 acks=1 。 马上想到去看下kafka的日志,猜测这个时间段必然出现出现了 master 不可用的情况才会导致数据丢失。 在kafka集群的57号节点的机器上看到这样一段日志: [2019-10-12 11:03:39,427] WARN Client session

【Dubbo篇】--Dubbo框架的使用

扶醉桌前 提交于 2021-01-06 04:33:04
一、前述 Dubbo是一种提供高性能,透明化的RPC框架.是阿里开源的一个框架。 官网地址:http://dubbo.io/ 二、架构 组件解释: Provider: 提供者.发布服务的项目. Registry: 注册中心.所有提供者必须去注册中心注册自己所有能发布的服务. Consumer: 消费者.调用服务的项目. Monitor: 监控中心.监控消费者和提供者调用服务的时间及次数.默认每1分钟向监控中心生成一次统计数据.之间调用必须遵守Dubbo支持的协议. Container: 容器.Dubbo依赖于Spring容器. 执行顺序: 0:由Spring容器启动服务. 1 向注册中心注册服务. 2 消费者向注册中心订阅需要调用的服务.在注册中心的服务列表中寻找需要调用的服务.获取到提供者真实地址. 3 注册中心通知消费提供者的真实地址.如果提供者的服务发生变化,注册中心会自动推送信息给消费者. 4 消费者调用提供者的服务. 5 在调用过程中向监控中心发送数据,进行统计调用时间和调用次数. 6 虚线都是异步请求,实线都是同步请求. 三、Dubbo支持的注册中心 1.Zookeeper注册中心 1.1 优点:支持集群. 1.2 缺点:稳定性受Zookeeper影响. 2.Redis注册中心 1.1 优点:基于服务器双写模式.性能高. 1.2 缺点:要求服务器时间必须一致. 3

干货分享】最新 Java 后端面试系列干货,都在这了!

爷,独闯天下 提交于 2021-01-05 16:46:38
本仓库【Java Github 超硬核面试 “备战” 手册】整理过程中更加偏重实战方向,整理中我也会分享一些近些年自己开发和工作过程中的一些感悟、心得和无奈。 本仓库大部分内容来自我近几年的收集和整理,整体文章思路也是围绕着【面试备战计划】来进行整理的,主体内容包含:职业规划篇,跳槽篇,实操篇,一线大厂面试题篇,以及高频面试必备综合篇 等知识内容。 总归一句话:养成一颗奋发的平常心。 目录 程序员职业规划篇 职业分析及定位 职业生涯经验和建议 跳槽篇 跳槽是为了什么?不为什么? 什么时间 / 状态下跳槽最合适? 跳槽的节奏和路线图应该是怎样的? 造成面试不通过的核心原因,有哪些? 良好的心态和体态 实操篇 求职简历应该如何写? 怎么“高效”寻找求职渠道? 面试准备及总结 900份简历模板 BATJ一线大厂面试题篇 百度面试篇 腾讯面试篇 京东面试篇 头条面试篇 美团面试篇 华为面试篇 滴滴面试篇 互联网公司高频面试必备综合篇 并发编程面试题汇总 JVM面试题汇总 Netty常被问到的那些面试题汇总 Tomcat面试题整理汇总 Mysql面试题汇总 Spring源码深度解析 Mybatis常见面试题汇总 Nginx那些面试题汇总 Zookeeper面试题汇总 RabbitMQ常见面试题汇总 Kafka面试题汇总 Redis常见面试题汇总 Dubbo面试题 SpringBoot

什么是分布式锁?Redis实现分布式锁详解

二次信任 提交于 2021-01-05 10:18:52
     在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?今天继续由陈睿|mikechen来继续分享Redis这个系列。   01.什么是分布式锁   要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。   1.线程锁   主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。   2.进程锁   为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。   3.分布式锁   当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。   02.分布式锁的要求   首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:   1、互斥性:任意时刻,只能有一个客户端获取锁,不能同时有两个客户端获取到锁。   2、安全性:锁只能被持有该锁的客户端删除,不能由其它客户端删除。   3、死锁:获取锁的客户端因为某些原因

Dubbo面试题(2020最新版)

不问归期 提交于 2021-01-05 01:42:02
基础知识 为什么要用 Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。 Dubbo 是什么? Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。 Dubbo 的使用场景有哪些? 透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制:可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。 Dubbo 核心功能有哪些? Remoting:网络通信框架,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。 Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 Registry:服务注册,基于注册中心目录服务

一文搞懂注册中心 zookeeper 和 eureka 中的CP和 AP

家住魔仙堡 提交于 2021-01-04 14:10:58
前言 在分布式架构中往往伴随CAP的理论。因为分布式的架构,不再使用传统的单机架构,多机为了提供可靠服务所以需要冗余数据因而会存在分区容忍性P。 冗余数据的同时会在复制数据的同时伴随着可用性A 和强一致性C的问题。是选择停止可用性达到强一致性还是保留可用性选择最终一致性。通常选择后者。 其中 zookeeper 和 eureka分别是注册中心CP AP 的两种的实践。他们都提供服务注册中心的功能。建议使用AP。不强求数据的强一致性,达成数据的最终一致性。 ★ 服务注册中心的数据也就是返回的可用服务节点(ip+端口号) 服务A开了0-9十个服务节点,服务B需要调用服务A,两次查询返回0-8,1-9 不一致的数据。产生的影响就是0 和9 节点的负载不均衡 ” ★ 只要注册中心在 SLA 承诺的时间内(例如 1s 内)将数据收敛到一致状态(即满足最终一致),流量将很快趋于统计学意义上的一致,所以注册中心以最终一致的模型设计在生产实践中完全可以接受。 ” 1 eureka AP eureka 保证了可用性,实现最终一致性。 Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性)

Java程序员得分清的分布式、高并发与多线程

微笑、不失礼 提交于 2021-01-04 02:39:14
当提起这三个词的时候,是不是很多人都认为分布式=高并发=多线程? 当面试官问到高并发系统可以采用哪些手段来解决,或者被问到分布式系统如何解决一致性的问题,是不是一脸懵逼? 确实,在一开始接触的时候,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗?实际上, 他们三个总是相伴而生,但侧重点又有不同。 Java程序员得分清的分布式、高并发与多线程 什么是分布式? Java程序员得分清的分布式、高并发与多线程 分布式更多的一个概念, 是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段 。该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。从理念上讲,分布式的实现有两种形式: Java程序员得分清的分布式、高并发与多线程 水平扩展: 当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有服务器上,所有机器都可以提供相当的服务; 垂直拆分: 前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机器上,比如A机器处理余票查询的请求,B机器处理支付的请求。 Java程序员得分清的分布式、高并发与多线程 什么是高并发? Java程序员得分清的分布式、高并发与多线程

基于zookeeper的分布式Lock及RLock的实现

假如想象 提交于 2021-01-03 15:39:43
一.Lock and RLock 需要zookeeper的python 客户端kazoo # -*- coding: utf-8 -*- import os import uuid from kazoo.client import KazooClient from kazoo.recipe.lock import Lock class ZkLock(object): def __init__(self,lockname,zkhosts,basepath='/locks',logger=None,timeout=5): self._zk_hosts = zkhosts # self._client = KazooClient(hosts=self._zk_hosts,logger=logger,timeout=timeout) self._zk_path = os.path.join(basepath,lockname) self._lock_handle = Lock(self._client,self._zk_path) def start(self): self._client.start() def stop(self): self._client.stop() def acquire(self, blocking=True, timeout=None): self

kafka分区和副本如何分配

这一生的挚爱 提交于 2021-01-03 11:44:59
参考: https://blog.csdn.net/jediael_lu/article/details/77097361 申请一个topic,官方命令如下: bin/kafka-topics.sh --create //操作类型 --zookeeper localhost:2181 //kafka依赖的zookeeper地址 --replication-factor 2//副本因子 --partitions 1 //分区数量 --topic test //topic 名称 分区和副本的分配方式如下图: 可能通过上图,你云里雾里,既然知道命令,我们就通过命令来看看,到底如何分配。 bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 5 --topic test-part 通过命令可以看出 topic:test-part 指定了 5个分区,拷贝因子为2(代表只有一个副本),通过 执行命令 查看 topic:test-part 信息如下: [root@VM_15_71_centos kafka_2.11-1.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic

Hadoop集群初始化启动

社会主义新天地 提交于 2021-01-03 08:01:27
hadoop集群初始化启动 启动zookeeper ./zkServer.sh start 启动journalnode ./hadoop-daemon.sh start journalnode 格式化namenode hadoop namenode -format 将节点 1上的元数据拷贝到 2上 先启动1 上的namenode ./hadoop-daemon.sh start namenode 拷贝元数据,在 2节点上 hadoop namenode –bootstrapStandby 在任意节点上格式化 zk hdfs zkfc -formatZK 启动 zkfc(两台机器) ./hadoop-daemon.sh start zkfc 启动全部 ./starl-all.sh 来源: oschina 链接: https://my.oschina.net/u/4416343/blog/4253125