records

Kafka如果丢了消息,怎么处理的?

倖福魔咒の 提交于 2021-02-20 16:02:27
Kafka存在丢消息的问题,消息丢失会发生在Broker,Producer和Consumer三种。 Broker Broker丢失消息是由于Kafka本身的原因造成的,kafka为了得到更高的性能和吞吐量,将数据异步批量的存储在磁盘中。消息的刷盘过程,为了提高性能,减少刷盘次数,kafka采用了批量刷盘的做法。即,按照一定的消息量,和时间间隔进行刷盘。这种机制也是由于linux操作系统决定的。将数据存储到linux操作系统种,会先存储到页缓存(Page cache)中,按照时间或者其他条件进行刷盘(从page cache到file),或者通过fsync命令强制刷盘。数据在page cache中时,如果系统挂掉,数据会丢失。 服务器上高速读写以及同步到Replica 上图简述了broker写数据以及同步的一个过程。broker写数据只写到PageCache中,而pageCache位于内存。这部分数据在断电后是会丢失的。pageCache的数据通过linux的flusher程序进行刷盘。刷盘触发条件有三: 主动调用sync或fsync函数 可用内存低于阀值 dirty data时间达到阀值。dirty是pagecache的一个标识位,当有数据写入到pageCache时,pagecache被标注为dirty,数据刷盘以后,dirty标志清除。 Broker配置刷盘机制

Linux中split大文件分割和cat合并文件

扶醉桌前 提交于 2021-02-19 10:44:54
当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而不得不重新传输。这种情况下,可以先将大文件分割成小文件后分批传输,传完后再合并文件。 1.分割 -- split命令 可以指定按行数分割和按字节大小分割两种模式。 (1) 按行数分割 $ split -l 300 large_file.txt new_file_prefix 加上-d,使用数字后缀;加上--verbose,显示分割进度: $ split -l50000 -d large_file.txt part_ --verbose (2) 按字节大小分割 $ split -b 10m large_file.log new_file_prefix 2.合并 -- cat命令 $ cat part_* > merge_file.txt [注] split命令语法: split --h Usage: split [OPTION]... [FILE [PREFIX]] Output pieces of FILE to PREFIXaa, PREFIXab, ...; default size is 1000 lines, and default PREFIX is 'x'. With no FILE, or when FILE is -, read standard input.

Java分页实现

放肆的年华 提交于 2021-02-19 01:50:53
首先我们要清楚java分页的思路 第一我们要明白前端页面需要向java后台传递当前页码数以及每页显示多少条数据 第二java后台代码需要向前端页面传递每页显示的数据,以及总条数以及总页数 代码如下: 首先我们要创建一个分页类用来存储数据 public class PageObject<T> implements Serializable { private static final long serialVersionUID = 1L; /** 当前页的页码值 */ private Integer pageCurrent = 1; /** 页面大小 */ private Integer pageSize = 10; /** 总行数(通过查询获得) */ private Integer rowCount = 0; /** 总页数(通过计算获得) */ private Integer pageCount = 0; /** 当前页记录 */ private List<T> records; public Integer getPageCurrent() { return pageCurrent; } public void setPageCurrent(Integer pageCurrent) { this.pageCurrent = pageCurrent; } public

Searching the Web UVA

筅森魡賤 提交于 2021-02-15 17:12:08
  The word “search engine” may not be strange to you. Generally speaking, a search engine searches the web pages available in the Internet, extracts and organizes the information and responds to users’ queries with the most relevant pages. World famous search engines, like GOOGLE, have become very important tools for us to use when we visit the web. Such conversations are now common in our daily life: “What does the word like ∗ ∗ ∗ ∗ ∗∗ mean?” “Um. . . I am not sure, just google it.”   In this problem, you are required to construct a small search engine. Sounds impossible, does it? Don’t worry

Flink kafka source & sink 源码解析

感情迁移 提交于 2021-02-08 11:26:13
Flink kafka source & sink 源码解析 吴鹏 Flink 中文社区 摘要:本文基于 Flink 1.9.0 和 Kafka 2.3 版本,对 Flink Kafka source 和 sink 端的源码进行解析,主要内容分为以下两部分:1.Flink-kafka-source 源码解析 * 流程概述 * 非 checkpoint 模式 offset 的提交 * checkpoint 模式下 offset 的提交 * 指定 offset 消费 2.Flink-kafka-sink 源码解析 * 初始化 * Task运行 * 小结 Tips:Flink 中文社区征稿啦,感兴趣的同学可点击「阅读原文」了解详情~ 1.Flink-kafka-source 源码解析 流程概述 一般在 Flink 中创建 kafka source 的代码如下: StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //KafkaEventSchema为自定义的数据字段解析类 env.addSource(new FlinkKafkaConsumer<>("foo", new KafkaEventSchema(), properties) 而 Kafka 的

Kafka 最佳实践

别来无恙 提交于 2021-02-08 04:07:49
这是一篇关于 Kafka 实践的文章,内容来自 DataWorks Summit/Hadoop Summit(Hadoop Summit)上的一篇分享,里面讲述了很多关于 Kafka 配置、监控、优化的内容,绝对是在实践中总结出的精华,有很大的借鉴参考意义,本文主要是根据 PPT 的内容进行翻译及适当补充。 Kafka 的架构这里就不多做介绍了,直接步入正题。 Kafka 基本配置及性能优化 这里主要是 Kafka 集群基本配置的相关内容。 硬件要求 Kafka 集群基本硬件的保证 OS 调优 OS page cache:应当可以缓存所有活跃的 Segment(Kafka 中最基本的数据存储单位); fd 限制:100k+; 禁用 swapping:简单来说,swap 作用是当内存的使用达到一个临界值时就会将内存中的数据移动到 swap 交换空间,但是此时,内存可能还有很多空余资源,swap 走的是磁盘 IO,对于内存读写很在意的系统,最好禁止使用 swap 分区; TCP 调优 JVM 配置 JDK 8 并且使用 G1 垃圾收集器 至少要分配 6-8 GB 的堆内存 Kafka 磁盘存储 使用多块磁盘,并配置为 Kafka 专用的磁盘; JBOD vs RAID10; JBOD(Just a Bunch of Disks,简单来说它表示一个没有控制软件提供协调控制的磁盘集合

Java regex to match multiline records starting with fixed label

你。 提交于 2021-01-28 14:39:38
问题 Following is an example of a list of multiline records, each starting with a fixed string label ( LABEL ): <Irrelevant line> ... <Irrelevant line> LABEL ... ... ... LABEL ... ... ... LABEL ... ... ... LABEL ... ... ... Is there a Java regular expression that can much the above and extract each record, i.e. LABEL ... ... ... Also, is this the fastest way of extracting those records, or reading line-by-line and checking the start of the string would yield faster results? 回答1: To iterate over

使用 C# 9 的records作为强类型ID

北城余情 提交于 2021-01-19 14:37:42
强类型ID 实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体的ID的类型是一样的,比如都是整数的ID,这有可能会出现ID值传错的问题,看下边的示例。 public void AddProductToOrder(int orderId, int productId, int count) { ... } ... // 这个地方,参数传错了 AddProductToOrder(productId, orderId, int count); 上面的代码可以很好地通过检查并编译,但是在运行的时候就出问题了,这是逻辑bug。 幸运的是,可以定义强类型id来解决这个问题,这个想法很简单,为每个实体的ID声明一个特定的类型,现在需要这样写: // 使用强类型ID代替整数ID public void AddProductToOrder(OrderId orderId, ProductId productId, int count) { ... } ... // 这个地方,参数传错了 AddProductToOrder(productId, orderId, int count); 在上面的代码中,我们犯了与第一个示例相同的错误(交换productId和orderId),但是在这种情况下,类型不同,因此编译器会捕获该错误并报告错误,我们仍然需要对其进行修复

Pytest权威教程20-日志

China☆狼群 提交于 2021-01-14 02:49:15
[TOC] 返回: Pytest权威教程 记录日志 Pytest默认捕获WARNING以上日志消息,在每个失败的测试结果概要中,捕获的log信息和stdout、stderr信息使用相同的方式,分块显示。 不带选项运行: pytest 失败的用例显示格式如下: ----------------------- Captured stdlog call ---------------------- test_reporting.py 26 WARNING text going to logger ----------------------- Captured stdout call ---------------------- text going to stdout ----------------------- Captured stderr call ---------------------- text going to stderr ==================== 2 failed in 0.02 seconds ===================== 默认情况下,捕获到的每条日志消息都会显示模块,行号,日志级别和消息内容。 如果需要更改日志的显示格式,也可以通过传递特定的日志格式选项和日期格式选项,来指定日志显示的格式: pytest --log-format

欢迎来到 C# 9.0(Welcome to C# 9.0)

故事扮演 提交于 2021-01-05 23:49:39
翻译自 Mads Torgersen 2020年5月20日的博文《Welcome to C# 9.0》,Mads Torgersen 是微软 C# 语言的首席设计师,也是微软 .NET 团队的项目群经理。 C# 9.0 正在成形,我想和大家分享一下我们对下一版本语言中添加的一些主要特性的想法。 对于 C# 的每一个新版本,我们都在努力让常见的编码场景的实现变得更加清晰和简单,C# 9.0 也不例外。这次特别关注的是支持数据模型的简洁和不可变表示。 就让我们一探究竟吧! 一、仅初始化(init-only)属性 对象初始化器非常棒。它们为类型的客户端提供了一种非常灵活和可读的格式来创建对象,并且特别适合于嵌套对象的创建,让你可以一次性创建整个对象树。这里有一个简单的例子: new Person { FirstName = "Scott" , LastName = "Hunter" } 对象初始化器还使类型作者不必编写大量的构造函数——他们所要做的就是编写一些属性! public class Person { public string FirstName { get ; set ; } public string LastName { get ; set ; } } 目前最大的限制是属性必须是 可变的(即可写的) ,对象初始化器才能工作:它们首先调用对象的构造函数