精华内容
下载资源
问答
  • 提交
    千次阅读
    2021-12-17 21:52:52

    只说结论!

    如果我们使用原始apache-kafka 依赖的API来消费数据:

    1. 如果enable.auto.commit为true,则表示自动提交,但不会在拉取数据之后立即提交。在一次poll的数据处理完毕之后,将会在下一次poll数据的时候,首先检查是否到达了auto.commit.interval.ms自动提交间隔的时间,如果到达了(默认5s),那么会提交此前拉取的消息的最大偏移量,否则不会提交。
    2. 如果enable.auto.commit为false,则表示手动提交,那么需要通过consumer.commitAsync()或者commitSync()手动提交偏移量,这两个方法将会提交目前最大的offset,否则重启之后将会消费此前的数据。

    如果使用spring-kafka 的@Listener注解来消费数据:

    1. 如果enable.auto.commit为true,则表示自动提交,但不会在拉取数据之后立即提交。在一次poll的数据处理完毕之后,将会在下一次poll数据的时候,首先检查是否到达了auto.commit.interval.ms自动提交间隔的时间,如果到达了(默认5s),那么会提交此前拉去的消息的最大偏移量,否则不会提交。

    2. 如果enable.auto.commit为false,则表示手动提交此时需要注意选择提交的模式AckMode。

      1. BATCH:默认的提交模式。当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后提交,由Spring帮我们提交。
      2. RECORD:当每一条记录被消费者监听器(ListenerConsumer)处理之后提交,由Spring帮我们提交。
      3. TIME:当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后,距离上次提交时间大于TIME时提交,由Spring帮我们提交。
      4. COUNT:当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后,被处理record数量大于等于COUNT时提交,由Spring帮我们提交。
      5. COUNT_TIME:TIME和COUNT有一个条件满足时提交,由Spring帮我们提交。
      6. MANUAL:需要对监听消息的方法中引入 Acknowledgment参数,并在代码中调用acknowledge()方法进行手动提交。实际上,对于每一批poll()的数据,每次调用acknowledge()方法之后仅仅是将offset存放到本地map缓存,在下一次poll的时候,在poll新数据之前从缓存中拿出来批量提交,也就是说与BATCH有相同的语义。
      7. MANUAL_IMMEDIATE:需要对监听消息的方法中引入 Acknowledgment参数,并在代码中调用acknowledge()方法进行手动提交。实际上,对于每一批poll()的数据,每次调用acknowledge()方法之后立即进行偏移量的提交。

    由于默认的提交模式是BATCH,因此在使用@Listener注解来消费数据时,即使enable.auto.commit为false,偏移量也会在每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后提交,这里的提交实际上是手动提交,但是这个“手动提交”操作由Spring帮我们做了,因此如果不设置AckMode为MANUAL或者MANUAL_IMMEDIATE,我们仍然会觉得这些数据被“自动提交”了,实际上是由Spring帮我们执行了手动提交的代码,造成误解。

    MANUAL和MANUAL_IMMEDIATE的区别是:MANUAL_IMMEDIATE是消费完一个消息就提交,MANUAL是处理完一批消息(默认500)之后,在下一次拉取消息之前批量提交。

    如果中间有一批数据没有提交,那么在一次消费过程中,这些没有提交的数据不会重复消费,而是会一直向后消费,除非重启消费者,会被再次消费。如果后面有消息的offset被提交,那么该offset之前的所有消息都算作已提交,重启之后也不会被再次消费。

    相关文章:

    Kafka

    如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

    更多相关内容
  • git提交规范,规范自己的提交标准

    千次阅读 2022-04-21 11:44:22
    为了规范我的git提交内容,提交的时候commit -m “备注的信息”,但是每个人的备注信息千奇百怪,为了统一,我们进行了git的规范。 首先要全局安装commitizen npm i -g commitizen@4.2.4 然后安装插件 npm i cz-...

    为了规范我的git提交内容,提交的时候commit -m “备注的信息”,但是每个人的备注信息千奇百怪,为了统一,我们进行了git的规范。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    首先要全局安装commitizen

    npm i -g commitizen@4.2.4
    

    然后安装插件

    npm i cz-customizable@6.3.0 --save-dev
    

    在package.json中添加代码

    "config": {
      "commitizen": {
         "path": "node_modules/cz-customizable"
       }
     },
    

    最后在根目录中添加一个文件 .cz-config.js
    在这里插入图片描述
    这里就可以做一个规范git提交的规则了

    module.exports = {
      // 可选类型
      types: [
        { value: 'feat', name: 'feat:     新功能' },
        { value: 'fix', name: 'fix:      修复' },
        { value: 'docs', name: 'docs:     文档变更' },
        { value: 'style', name: 'style:    代码格式(不影响代码运行的变动)' },
        {
          value: 'refactor',
          name: 'refactor: 重构(既不是增加feature,也不是修复bug)'
        },
        { value: 'perf', name: 'perf:     性能优化' },
        { value: 'test', name: 'test:     增加测试' },
        { value: 'chore', name: 'chore:    构建过程或辅助工具的变动' },
        { value: 'revert', name: 'revert:   回退' },
        { value: 'build', name: 'build:    打包' }
      ],
      // 消息步骤
      messages: {
        type: '请选择提交类型:',
        customScope: '请输入修改范围(可选):',
        subject: '请简要描述提交(必填):',
        body: '请输入详细描述(可选):',
        footer: '请输入要关闭的issue(可选):',
        confirmCommit: '确认使用以上信息提交?(y/n/e/h)'
      },
      // 跳过问题
      skipQuestions: ['body', 'footer'],
      // subject文字长度默认是72
      subjectLimit: 72
    }
    
    

    在我们修改代码之后,使用git cz 代替git commit -m,然后就能描述自己的git提交的内容了

    在这里插入图片描述
    最后得到一个规范的git提示在这里插入图片描述
    在这里插入图片描述
    最后直接提交git push origin master 就能看到git上的规范提交提示了

    但是我们还有一个问题,如果我们的程序员忘了git cz 的提交规范该如何解决呢?

    下面我们来介绍一下git Hooks

    在这里插入图片描述
    按下面的方式进行安装或者创建需要的插件和文件
    在这里插入图片描述

    npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4
    

    创建commitlint.config.js文件
    在这里插入图片描述

    module.exports = {
      // 继承的规则
      extends: ['@commitlint/config-conventional'],
      // 定义规则类型
      rules: {
        // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
        'type-enum': [
          2,
          'always',
          [
            'feat', // 新功能 feature
            'fix', // 修复 bug
            'docs', // 文档注释
            'style', // 代码格式(不影响代码运行的变动)
            'refactor', // 重构(既不增加新功能,也不是修复bug)
            'perf', // 性能优化
            'test', // 增加测试
            'chore', // 构建过程或辅助工具的变动
            'revert', // 回退
            'build' // 打包
          ]
        ],
        // subject 大小写不做校验
        'subject-case': [0]
      }
    }
    
    

    后面就是安装husky的插件,他可以检测commitlint的一个工具
    在这里插入图片描述
    在这里插入图片描述
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/b39f9d882d574a7d96e6da1a4ac055be.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6K-l6LWw55qE5byv6Lev77yM5LiA5q2l6YO95LiN5Lya5bCR44CC,size_12,color_FFFFFF,t_70,g_se,x_16在这里插入图片描述

    1、安装husky

    npm i husky@7.0.1 --save-dev
    

    2、启动hooks

    npx husky install
    

    3、在package.json中加入一行代码,然后运行

    npm set-script prepare "husky install" 
    

    4、

    npm run prepare
    

    5、
    6、

    npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    npx husky add .husky/pre-commit "npx eslint --ext .js,.vue src"
    

    在这里插入图片描述
    在这里插入图片描述
    把package.json的lint-staged代码改成下面

    "lint-staged": {
       "src/**/*.{js,vue}": [
         "eslint --fix",
         "git add"
       ]
     }
    

    如上配置,每次它只会在你本地 commit 之前,校验你提交的内容是否符合你本地配置的 eslint规则(这个见文档 ESLint ),校验会出现两种结果:

    1. 如果符合规则:则会提交成功。

    2. 如果不符合规则:它会自动执行 eslint --fix 尝试帮你自动修复,如果修复成功则会帮你把修复好的代码提交,如果失败,则会提示你错误,让你修好这个错误之后才能允许你提交代码。

    3. 修改 .husky/pre-commit 文件

      #!/bin/sh
      . "$(dirname "$0")/_/husky.sh"
      
      npx lint-staged
      
      
    4. 再次执行提交代码

    5. 发现 暂存区中 不符合 ESlint 的内容,被自动修复

    展开全文
  • 文章目录第一步:注册github第二步:下载、安装git、第三步:git的使用git 简介使用版本控制的好处集中式版本控制分布式版本控制git 的工作原理提交代码的git指令(重点)设置用户签名SSH 提交绑定 SSH 密钥创建远程...


    本人最近在重装系统后重新配置了 git,发现按着原来的教程步骤做有些地方却给我整不会了。在搜索引擎的帮助下,再加上自己对 git 知识的巩固,最终算是解决了自己遇到的问题。从 2021 年 下半年起,在 git 的使用上,某些地方略有改动,比如 用 https push时不再用密码验证而是改用 token 验证(这是由于 github 的改动,和 git 的版本无关),如果按着一些老教程可能会遇到一些新的坑(不过那些教程的大部分内容还是非常有帮助的)。所以我就基于自己的实践,总结了一篇全新版的怎么在 github 上提交代码的笔记。
    对于小白来说,重点关注第一步,第二步以及第三步中的 SSH 提交方式就能第一次在 github 上提交内容了。
    另外,突然发现我的 git 还是老版本,如果大家的版本中没有 master ,确认代之的是 main,那就把我的教程中的所有 master 改为 main (小白也许会疑惑这是啥,等到后面用 git 提交代码的时候就能明白啦)

    第一步:注册 github

    这个大家直接搜索github官网,在上面按步骤注册一个账号就好了。

    第二步:下载、安装 git

    进入git官网下载git,链接:https://git-scm.com/
    因为我的电脑是Window10 系统,所以我就下了Windows版
    安装注意事项:
    基本是一路Next,其中有些需要勾选的部分,按照默认的也是可以的,如果你不放心,可以看看下面这些图(这些是安装git 2.31.1的截图,最新版本号会比这个高,不过基本操作差不多,如果有些默认的选项和我的图片上不一致,就用你自己电脑上的默认选项)
    在这里插入图片描述
    是否创建桌面快捷方式看个人喜好,一般来说使用git很少从桌面直接打开
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    后面还有一些步骤也跟着默认的配置就好了,这里就不把图发出来了(为大家节省流量)。咱们迅速进入下一步😀。


    第三步:git 的使用

    安装好git后,我们可以在桌面或者任意一个文件夹里按下鼠标右键,会发现有了 Git Bash Here 的选项
    在这里插入图片描述
    我们点击Git Bash Here,出现了一个黑框框。
    在这里插入图片描述
    我们待会儿就是通过这个像命令行一样的终端来使用git。当然大家终端里的那行字可能和我的不一样,前半串是你电脑的型号,后半串这取决于你在哪个路径打开git终端。我们可以在这个终端通过一些git的命令进行一些操作,和使用linux终端是非常相似的。在此之前,我们先简要了解一下什么是git。

    git 简介

    使用版本控制的好处

    git是一款分布式版本控制工具。版本控制可以帮助我们查看文件修改的历史记录,以及不同的版本具体改在什么地方。因此我们可以很方便地管理不同版本的代码,甚至可以轻松地进行版本切换

    除了有利于个人的开发,版本控制对团队的协作也起到非常大的作用。比如我和别人合作写一个项目,我就可以通过版本控制工具浏览所有开发的历史记录,知道对方改动了什么地方,这有利于掌控整个项目的开发进度。
    并且我们不用担心作了不必要的修改,或者因为需求变更作了多余的修改,因为我们可以轻易地复原之前正常的版本。

    集中式版本控制

    在分布式版本控制工具的诞生之前,集中式版本控制是比较常见的,例如SVN。对于集中式版本控制来说版本库(有一个仓库可以存放不同的版本)都是集中存放在一台中央服务器上,中央服务器保存所有文件的修订版本。而协同工作的人通过客户端连接这台服务器,取出最新的文件或提交更新。

    这样做的好处是每个人可以在一定程度上看到项目中的其他人正在做些什么。管理员也可以轻松地掌控每个开发者的权限。

    但是缺点是需要联网才可以操作,并且如果中央服务器单点故障,那么在服务器宕机的过程中,谁也无法提交更新,也就无法协同工作。
    在这里插入图片描述

    分布式版本控制

    分布式版本控制系统根本没有“中央服务器”,每个人的电脑都可以成为一个完整的版本库。
    优点是:
    1)对于个人开发来说,不需要联网也能进行版本控制,因为版本库在本地,所以可以进行本地的修改。如果多人协作要怎么办?这时要借助一个远程库,比如A把本地的版本库提交到远程库,然后B从远程库把代码仓库拉取到自己的电脑上,修改后再提交,这个过程还是要联网的。但是相较于集中式版本控制,分布式版本控制至少可以实现本地的版本控制。
    2)每个客户端保存的都是完整的项目。比如A换了新电脑,但是B的电脑有保存完整的代码,B就能把版本库推送给A.
    在这里插入图片描述

    git 的工作原理

    git工作流程(网图)
    以提交代码为例吧,要想把我们电脑里的代码提交到远程仓库(github就是一种远程仓库),需要经历以下的流程:
    工作区 -> 暂存区 -> 本地库 -> 远程库

    工作区:即本地文件夹,存放着我们写的代码。
    暂存区:临时存储从工作区提交过来的操作。
    本地库:记录对于文件的各种操作,记录着历史版本。
    远程库:托管在网络端的仓库。

    提交代码的 git 指令(重点)

    注:使用指令时一定要注意空格的位置!!!

    设置用户签名

    首先我们得让 git 知道是谁在操作。所以我们得设置一下用户信息。
    随便在一个位置打开 Git Bash 终端,分别输入以下命令:

    1)git config --global user.name “github上注册的用户名”
    2)git config --global user.email "github上注册的邮箱"

    在这里插入图片描述
    在这里插入图片描述
    我们可以输入 git config --global user.namegit config --global user.email来检查我们设置的是否正确,有无拼写错误的情况。写错的话就重新输入设置签名的指令。

    接下来就要准备提交代码了。
    将代码提交至 github 有两种方式。一种是 Https,另一种是 SSH。
    用 Https 提交每次都要输入用户名和密码,而 SSH 是种免密登录方式。本人两种方式都有尝试,感觉 SSH 还是更香一点🐶。Https 的话感觉坑还挺多的。所以这里先教大家如何用 SSH 提交。

    SSH 提交

    绑定 SSH 密钥

    使用 SSH 提交要通过 SSH 密钥。我们要绑定 SSH 密钥链接本地和 github 远程库

    ♥在 Git Bash 中 输入 ssh-keygen -t rsa -C "注册时用的邮箱地址" 得到密钥。

    注意空格,手机版的CSDN可能不好看出空格,那就参考下面这张图:
    在这里插入图片描述
    ssh-keygen 是生成公钥和私钥的命令,-t 是指定哪一种加密算法,rsa 就是一种加密协议,-C 是一种描述,后面跟的是你在 github 上注册的邮箱。
    输入这个指令后按下回车,之后终端里会跳出一些字,是让你确认一些东西的,只要一路回车就好了。最后跳出类似这个东西就是密钥创建成功了。
    在这里插入图片描述
    只要出现这个长方形的图像就行了,里面的内容可能每个人都不一样。(注:随着git版本的更新,可能输出的内容会和本文里的不一样,但是只要生成 SSH 的指令输对,一路回车就能操作成功)

    然后在 本地 /.ssh/ 目录下找到 id_rsa.pub ,用记事本打开得到所需密钥。记住是 .pub后缀的文件,这里得到的是公钥,另一个文件存储的是私钥,是不能公开的。我这里是在 C 盘的目录找。
    在这里插入图片描述
    获取 SSH 密钥还有另一种方法:(和上面在本地文件夹查看的方法二选一)
    我们在 Git Bash 中使用命令 cd ~/.ssh 进入到 ssh 目录下,然后输入命令:
    cat id_rsa.pub 可以在终端中查看密钥。

    我们需要把这个密钥复制下来,然后绑定到 github 官网中:
    1)打开官网登录,注意你账号的邮箱必须和刚刚生成 SSH 密钥的邮箱是一样的。
    2)如图所示,点击右上角的账号头像,打开 Settings
    在这里插入图片描述
    找到 SSH and CPG Keys,点击 New SSH key(我这里是之前就创建了一个)
    在这里插入图片描述
    然后把刚刚复制的密钥粘贴进去,Title 就是我们给密钥随便起个名字。
    在这里插入图片描述

    创建远程仓库

    进入官网后点击右上角的”+“号,创建一个新仓库。
    在这里插入图片描述
    在这里插入图片描述
    我这里创建了一个仓库叫做 NewGitTest,创建成功后就会跳转到如下的界面,包含仓库链接和一些新手引导指令:
    在这里插入图片描述
    接下来我们就可以用指令往 github 仓库里推送自己的代码了!
    这里又分为克隆仓库的方式和远程添加的方式,咱们二选一即可。

    克隆远程库

    我们找一个目录用于存放我们的克隆库,在这个目录下打开 Git Bash (我是在电脑里创建一个名为 github_clone_workspace 的文件夹用于存放我的克隆库),输入以下指令:

    git clone 自己仓库里的SSH链接

    (链接就是以下这个)
    在这里插入图片描述
    如果仓库里已经有文件了,SSH链接就在这个地方(要先点击 Code):
    在这里插入图片描述

    注意,如果你的链接是以 https 开头,说明此时用的是 Https 的方式。我们要把它切换成 SSH。
    Git Bash中:
    在这里插入图片描述
    这里在输入克隆命令后可能有的小伙伴在 Cloning into xxx下面出现一大堆文字,比如:

    RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
    Are you sure you want to continue connecting (yes/no)?
    

    注意:这里我们要手动输入 yes ,不能直接回车,否则会报 “Host key verification failed. fatal: Could not read from remote repository.”!(本人踩过的坑😟)

    这时候我们的本地文件夹里生成这个克隆库了。
    在这里插入图片描述
    克隆过程其实做了 3 件事:
    1)拉取远程库的内容
    2)初始化仓库
    3)为仓库创建别名

    这个别名是什么东西呢?在此之前,github 上的 SSH/Https 链接标识了哪一个远程库,但是链接毕竟很长,给仓库起个别名是省事的。这里 git 会自动帮我们创一个别名,叫做 origin 。可以进入克隆好的仓库文件夹,打开 Git Bash 通过 git remote -v 查看:(我的路径后多了 NewGitTest,这是因为我已经进入到这个文件夹里了)
    在这里插入图片描述
    注意:我这张图里黄色的路径最后是一个蓝色的 (master) 。新版的 git 终端中路径后缀应该是用 main来代替 master

    这时候仓库还是空的,我们给仓库添加一个文件吧!
    打开这个文件夹,随便创建一个文件,我这里就直接创建一个文本文件了。
    在这里插入图片描述

    提交到暂存区

    我们在当前文件夹打开 Git Bash,输入以下指令:

    git add 你要想添加的文件名
    

    在这里插入图片描述
    这一步相当于把工作区中的代码提交到暂存区中
    add 之后我们可以用 git status 查看暂存区状态,绿色表示暂存区里已经有了我们要提交的文件。
    在这里插入图片描述
    如果我们后悔了,又不想传这个文件了该怎么办?
    其实是可以从暂存区中撤回的,输入 git rm --cached 要撤回的文件 可以返回暂存区的文件。这时候再用 git status 查看状态发现变为了红色,这时我们可以重新 add 了。
    在这里插入图片描述

    提交到本地库和备注

    使用命令:

    git commit -m "备注信息"
    

    (这种方式是将暂存区的所有文件提交到本地库,如果想指定文件,就在指令最后加文件名)
    这时候再用 git status 查看状态就显示提交完成,不显示任何文件了。
    在这里插入图片描述
    此时已成功将文件提交至本地库。
    注:提交至本地库后就不能撤回了。

    提交至远程仓库

    输入命令

    git push -u origin master 
    

    origin是仓库的别名,master 代表主分支,我们默认是在主分支里提交。这里不加 -u 其实也可以 push

    同样,如果你的 Git Bash 终端中路径后缀是 main 而不是 master ,你要改为:git push -u origin main (其实就是把 master 换成 main)
    在这里插入图片描述
    这个地方是 master 就还是用 git push -u origin master
    如果是 main 就是用 git push -u origin main

    完整的如下:
    在这里插入图片描述
    看到类似这张图的结果就说明上传成功了!
    回到 github 查看一下
    在这里插入图片描述
    有了我们提交的文件, perfect !

    然后以后我们在本地库更改、添加、删除文件后再次推送至远程库时,基本就是用这三个指令:

    git add xxx
    git commit -m "xxx"
    git push -u origin master
    
    总结
    1. 将本地生成的 SSH 密钥绑定到 github ,得到密钥的指令:

    ssh-keygen -t rsa -C “注册时用的邮箱地址”

    1. github 上创建仓库,将远程库克隆到本地(用 SSH 链接)
      使用指令:

    git clone 自己仓库里的SSH链接

    1. 使用三件套实现提交:

    git add xxx
    git commit -m “备注信息”
    git push -u origin master

    远程添加(和克隆仓库提交法二选一)

    我们手动创建一个文件夹作为本地库(与克隆仓库方式不同,克隆仓库是直接自动帮我们创建一个和 github 上仓库名相同的文件夹)

    进入到文件夹中,打开 Git Bash
    首先使用 git init 初始化仓库,这时我们会发现路径后面多了一个 (master)
    在这里插入图片描述
    tip: 如果以后我们看到想要操作的路径后缀没有 master(或 main),记得 git init 下
    使用远程添加的方式必须初始化仓库。而克隆仓库会自动帮你初始化

    因为此时我们不是用克隆的方式,本地是不知道和哪个远程库连接的,这时我们用这个指令:

    git remote add origin 仓库的SSH链接
    

    注:这个 origin 只是我们给后面一长串远程地址起的别名,你也可以起别的名字,但是之后 push 的时候原本 origin 的位置就改成你起的别名。

    我们可以用 git remote -v 来查看仓库别名。在还未 remote add之前应该是空的。

    现在关联成功了,我们就还是用三件套进行提交:

    git add xxx
    git commit -m "xxx"
    git push -u origin master
    

    Https 提交

    Https 提交也是分为克隆仓库远程添加两种方式,且步骤和 SSH 提交是一样的,只不过我们需要把 SSH 链接替换成 Https 链接,提交的时候需要输入账号密码
    在这里插入图片描述

    Https 提交中的坑

    但是用 Https 提交感觉坑还是挺多的,首先个人感觉在连接的稳定性上可能不如 SSH,github 是个外国网站,有时候因为网络问题会一直 push 不成功,从而怀疑人生。
    另外,划重点:
    在2021年8月31日后 用 Https push 代码不再采用密码验证的方式。
    在这里插入图片描述
    第一次测试就翻车了… 这是因为网络的问题(SSH 还是香,一次就 push 成功了),我们再试亿次…
    哦吼,成功了,这时候会跳出这个:
    在这里插入图片描述
    输入用户名,接下来输入密码:
    在这里插入图片描述
    输完后终端出现这句话:
    在这里插入图片描述
    不是,不是你让我输密码吗? 你是故意找茬是不是?🐶🐶🐶
    好吧,简单翻译下,从 2021 年 8 月 13 日起,不能再用密码验证的方式,而是要用 token 验证的方式。

    Token 验证

    我们打开 github官网,打开 Settings -> Developer settings -> Personal access tokens
    在这里插入图片描述

    在这里插入图片描述
    下面这步很重要:
    在这里插入图片描述
    里面有很多勾选项,第一项 repo 应该是要勾选的,否则后续真的会出现一些难以捉摸的报错😟
    (比如可能会报 403 权限不足,之前我创建 token 时啥也不勾选,最后 push 时就一直报 403 错误。利用搜索引擎查找解决的方法,但是基本上在我电脑上不起作用,后来我新建一个 token ,把 repo 勾选上。后续就不报错了)

    其实全勾选也暂时没啥问题,这里选项太多了,本人也还在琢磨中,选完后点击生成 token 就行了。
    然后这时候我们会得到一长串字符串,这就是 token ,我们最好要把 token 保存到某一个地方,因为你第二次进入这个界面就不会显示 token 了。
    之后我们用 Https 提交,在密码验证的地方就把 token 当作密码来校验。

    已用 Https 连接的仓库转为用 SSH 提交

    好吧, Https 提交好像确实比 SSH 提交繁琐一点。
    那如果 github 上的一个仓库已经是用 Https 连接的话可以用 SSH 提交吗?
    答案是可以的。
    首先我们还是要确保 SSH 密钥已经和 github 绑定。
    然后我们复制仓库的 SSH 链接,在 Git Bash 中做如下操作:
    在这里插入图片描述
    push 的时候我们把 SSH 链接放在原本别名的位置(原本是 origin,现在改为仓库的 SSH 链接,其实 SSH 就代表了仓库的名字,原理还是一样的)
    这时候就瞬间提交成功,心情也一下子舒畅了。


    在这里插入图片描述

    展开全文
  • 自动位移提交的方式在正常情况下不会发生消息丢失或重复消费的现象,但是在编程的世界里异常无可避免,与此同时,自动位移提交也无法做到精确的位移管理。 在Kafka 中还提供了手动位移提交的方式,这样可以使得开发...

    自动位移提交的方式在正常情况下不会发生消息丢失或重复消费的现象,但是在编程的世界里异常无可避免,与此同时,自动位移提交也无法做到精确的位移管理

    在Kafka 中还提供了手动位移提交的方式,这样可以使得开发人员对消费位移的管理控制更加灵活。很多时候并不是说拉取到消息就算消费完成,而是需要将消息写入数据库、写入本地缓存,或者是更加复杂的业务处理。在这些场景下,所有的业务处理完成才能认为消息被成功消费,手动的提交方式可以让开发人员根据程序的逻辑在合适的地方进行位移提交。开启手动提交功能的前提是消费者客户端参数enable.auto.commit 配置为false ,示例如下:

    properties.put("enable.auto.commit", "false");

    手动提交可以细分为同步提交和异步提交,对应于KafkaConsumer 中的commitSync()和commitAsync()两种类型的方法。我们这里先讲述同步提交的方式

    commitSync()方法

    定义如下:

    public void commitSync()

    这个方法很简单,下面使用它演示同步提交的简单用法:

    while(true) {
    		ConsumerRecords<String , String> records= consumer.poll(1000);
    		for (ConsumerRecord<String, String> record : records) {
    		//do some logical processing .
    		}
    		consumer.commitSync() ;
    	}

    可以看到示例中先对拉取到的每一条消息做相应的逻辑处理,然后对整个消息集做同步提交。参考KafkaConsumer 源码中提供的示例,针对上面的示例还可以修改为批量处理+批量提交的方式, 关键代码如下:

    上面的示例中将拉取到的消息存入缓存buffer,等到积累到足够多的时候,也就是示例中大于等于200 个的时候,再做相应的批量处理,之后再做批量提交。这两个示例都有重复消费的问题,如果在业务逻辑处理完之后,并且在同步位移提交前,程序出现了崩渍, 那么待恢复之后又只能从上一次位移提交的地方拉取消息,由此在两次位移提交的窗口中出现了重复消费的现象

    commitSync ()方法会根据poll()方法拉取的最新位移来进行提交(注意提交的值对应于图3-6中position 的位置〉,只要没有发生不可恢复的错误( Unrecoverable Eηor ),它就会阻塞消费者线程直至位移提交完成。对于不可恢复的错误,比如CommitFailedException 、WakeupException 、InterruptException 、AuthenticationException 、AuthorizationException 等,我们可以将其捕获并做针对性的处理。对于采用commitSync()的无参方法而言,它提交消费位移的频率和拉取批次消息、处理批
    次消息的频率是一样的,如果想寻求更细粒度的、更精准的提交,那么就需要使用commitSync()的另一个含参方法,具体定义如下:

    public void commitSync(final Map<TopicPartition , OffsetAndMetadata> offsets)

    该方法提供了一个offsets 参数, 用来提交指定分区的位移。无参的commitSync()方法只能提交当前批次对应的position 值。如果需要提交一个中间值,比如业务每消费一条消息就提交一次位移,那么就可以使用这种方式,我们来看一下代码示例,如代码清单3-3 所示。

    在实际应用中,很少会有这种每消费一条消息就提交一次消费位移的必要场景。commitSync()方法本身是同步执行的,会耗费一定的性能,而示例中的这种提交方式会将性能拉到一个相当低的点。更多时候是按照分区的粒度划分提交位移的界限,这里我们就要用到了3.2.4 章中提及的ConsumerRecords 类的partitions()方法和records(TopicPartition)方法,关键示例代码如代码清单3-4 所示(修改自KafkaConsumer 源码中的示例,注意代码中加粗的部分〉。

    异步提交的方式( commitAsync())

    在执行的时候消费者线程不会被阻塞, 可能在提交消费位移的结果还未返回之前就开始了新一次的拉取操作。异步提交可以便消费者的性能得到一定的增强。commitAsync 方法有三个不同的重载方法,具体定义如下:

    public void commitAsync()
    public void commitAsync(OffsetCommitCallback callback)
    public void commitAsync(final Map<TopicPartition , OffsetAndMetadata> offsets , OffsetCommitCallback callback)

    第一个无参的方法和第三个方法中的offsets 都很好理解,对照commitSync()方法即可。关键的是这里的第二个方法和第三个方法中的callback 参数,它提供了一个异步提交的回调方法,当位移提交完成后会回调OffsetCommitCallback 中的onComplete()方法。

    commitAsync()提交的时候同样会有失败的情况发生,那么我们应该怎么处理呢?读者有可能想到的是重试,问题的关键也就在这里了。如果某一次异步提交的消费位移为x , 但是提交失败了,然后下一次又异步提交了消费位移为x+y,这次成功了。如果这里引入了重试机制,前一次的异步提交的消费位移在重试的时候提交成功了,那么此时的消费位移又变为了x 。如果此时发生异常(或者再均衡) , 那么恢复之后的消费者(或者新的消费者)就会从x 处开始消费消息,这样就发生了重复消费的问题。
    为此我们可以设置一个递增的序号来维护异步提交的顺序,每次位移提交之后就增加序号相对应的值。在遇到位移提交失败需要重试的时候,可以检查所提交的位移和序号的值的大小,如果前者小于后者,则说明有更大的位移己经提交了,不需要再进行本次重试:如果两者相同,则说明可以进行重试提交。除非程序编码错误,否则不会出现前者大于后者的情况。如果位移提交失败的情况经常发生,那么说明系统肯定出现了故障,在-般情况下,位移提交失败的情况很少发生,不重试也没有关系,后面的提交也会有成功的。重试会增加代码逻辑的复杂度,不重试会增加重复消费的概率。如果消费者异常退出,那么这个重复消费的问题就很难避免,因为这种情况下无法及时提交消费位移;如果消费者正常退出或发生再均衡的情况,那么可以在退出或再均衡执行之前使用同步提交的方式做最后的把关。

    示例代码中加粗的部分是在消费者正常退出时为位移提交“把关”添加的。发生再均衡情况的“把关”会在3.2 . 8 节中做详细介绍。

     

     

     

     

     

    展开全文
  • 表单自动填写,网页自动提交工具

    千次下载 热门讨论 2012-11-06 10:02:04
    模拟人工提交网页表单操作,同时监控提交结果变化并报警提示或自动处理报警动作。可广泛用于注册表单、登陆表单、信息添加修改表单提交。 1、支持多任务多操作连续提交,实现无人值守。 2、支持通过多代理服务器访问...
  • 简单谈谈MySQL的两阶段提交

    千次阅读 多人点赞 2021-12-19 21:16:59
    在讲解两阶段提交之前,需要对MySQL中的三种日志即binlog、redo log与undo log有一定的了解。 在这三种日志中,很多同学会把binlog与redo log混淆,下面使用一张表格来简单对比下两者的区别。 ...
  • git代码提交了怎么撤回提交

    万次阅读 2022-03-11 10:19:50
    彻底完了,刚线上更新的代码出现问题了,需要还原这次提交的代码! 做push操作了,但是我想撤回来 命令方式: 1.输入git log 查看所有提交的版本 注意:黄色字体中 commit后面的一串码就是每一个版本号对应的码 2....
  • Kafka学习笔记: 自动提交&手动提交.

    万次阅读 2019-12-26 23:22:20
    Consumer 需要向 Kafka 汇报自己的位移数据,这个汇报过程被称为提交位移(Committing Offsets)。因为 Consumer 能够同时消费多个分区的数据,所以位移的提交实际上是在分区粒度上进行的,即 Consumer 需要为分配给...
  • 以下是本人总结处来的一些form的提交方式,网上还有别的提交方式,这里我总结了大小分为7类,其实就是三类的提交方式,若有哪里不对的,还请评论指出来,大家一起学习学习 1、无任何验证提交(最普通的提交) 该方式...
  • 各大搜索引擎提交入口

    万次阅读 2021-03-19 00:18:44
    搜索引擎网站收录地址大全360搜索引擎登录入口:http://info.so.360.cn/site_submit.html即刻搜索网站提交入口:http://zz.jike.com/submit/genUrlForm盘古数据开放平台:...
  • JavaScript表单提交

    千次阅读 2020-04-28 17:06:25
    表单提交在前端编程阶段中也是一个重点。它是由页面数据保存到后台数据库的重要枢纽,通过表单提交的方式将数据上传到数据库进行保存。同时这些数据也包含用户信息、统计信息、日志信息等等。 数据的信息不同,上传...
  • 本篇记录一下消息的提交方式,默认的消费位移提交的方式是自动提交的,这个由消费者客户端参数enable.auto.commit控制,默认为true,默认的自动提交不是每消费一条消息就提交一次,而是定期的提交,这个定期的周期...
  • Git系列之修改历史提交信息

    千次阅读 2022-04-18 21:45:47
    目录1、查看 git 提交记录2、修改最近两个或者两次上的commit信息3、扩展:修改上一次git commit 提交的信息参考文献后记 1、查看 git 提交记录 git log 2、修改最近两个或者两次上的commit信息 比如我这里有三次...
  • git log 查看提交记录

    千次阅读 2021-01-14 17:16:34
    转载git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息$ git log -2 查看最近2次的提交历史记录-- fileName fileName为任意文件名,查看指定文件的提交信息。(注:文件名应该放到参数的最后...
  • git合并多次提交为一次提交

    千次阅读 2022-02-22 14:51:20
    有时候新人在git上提交代码时,如果不符合要求,会出现反复修改,导致提交次数过多,无法形成有效提交和回退,因为可能中间提交的版本有问题。所以查找一下是否有合并多次提交为一次有效提交的命令,果然很强大,像...
  • 如何防止重复提交

    万次阅读 2019-06-20 09:50:39
    转载 如何防止重复提交 一、有很多的应用场景都会遇到重复提交问题,比如: 1、点击提交按钮两次。 2、点击刷新按钮。 3、使用浏览器后退按钮重复之前的操作,导致重复提交表单。 4、使用浏览器历史记录重复提交表单...
  • form表单提交数据给后台

    千次阅读 2021-07-01 03:36:47
    form表单往后端提交数据注意三点1.所有获取用户输入标签都应该放在form表单里面2.action属性控制往哪儿提交,method一般都是设置成post3.提交按钮必须一定是type='submit'4.input标签必须有name属性,形成键值对2. ...
  • 文章目录一、截止时间(北京时间)二、提交流程三、提交需求四、选择过程 一、截止时间(北京时间) 具体事项 截止时间 论文提交开放 2021.1.1 摘要提交截止 2021.1.13 19:59 投稿者信息截止 2021.1.15 ...
  • git commit -m "开发:xx功能完成" // 提交到本地仓库 可以使用下面这个指令撤回: git reset --soft HEAD^ // 这里的 HEAD^ 意思是回退到上一个版本,可以写成 HEAD~1 // 如果 commit 了两次,两次都想回退,可以...
  • Git提交解决冲突

    千次阅读 2021-12-11 10:42:26
    一、git命令在提交代码前,没有pull拉最新的代码,因此再次提交出现了冲突 解决方法如下两种: 1.保留你本地的修改 git merge --abort git reset --merge 合并后记得一定要提交这个本地的合并(add–>commit–&...
  • 情形二如果你gitstatus查看了当前状态发现有部分文件你不想提交,那么就使用gitaddxxx(上图中的红色文字的文件链接)情形一如果你gitstatus查看了当前状态发现都是你修改过的文件,都要提交,那么你可以直接使用git...
  • 33.form标签中的GET和POST提交方式

    万次阅读 多人点赞 2021-09-05 10:36:26
    form标签中的GET和POST ...form>...<...action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的URL. ①form表单使用post方式提交的例子: 下面例子实现流程:   当我们第一次访
  • kafka 自动提交 和 手动提交

    千次阅读 2020-11-17 19:27:28
    Consumer 需要向 Kafka 汇报自己的位移数据,这个汇报过程被称为提交位移(Committing Offsets)。因为 Consumer 能够同时消费多个分区的数据,所以位移的提交实际上是在分区粒度上进行的,即 Consumer 需要为分配给...
  • 对分布式事务及两阶段提交、三阶段提交的理解 一、分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。 1.什么是数据一致性 ...
  • FLINK提交任务的两种方式

    千次阅读 2022-03-17 09:59:28
    FLINK提交任务的两种方式 1、命令行提交 bin/flink run -m hadoop:8081 -c cn.test.day01.StreamWordCount -p 4 /test/flink-java-1.0.jar -m 指定jobmanager的位置 -c 程序的全类名 -p 指定并行度 更多参数...
  • form表单提交的几种方式

    万次阅读 多人点赞 2019-06-04 09:41:03
    表单提交方式一:直接利用form表单提交 html页面代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Insert title here</title> </head> &...
  • gitee代码提交方式

    千次阅读 2022-02-26 17:13:16
    首先在b站搜索两个软件,安装顺序是先git ...只有未提交过的才能提交提交过的文件是不会显示这个按钮的。 点完add后会出现该页面,随后点击commit 随后点击push 点击ok即可 点击close结束提...
  • Git提交代码步骤

    万次阅读 2022-02-19 09:13:15
    3.把代码提交到缓存区,提交到缓存区后可以再次使用git status查看文件状态,如果所有文件都为绿色,证明已经添加到了缓存区 git add . 4.提交代码并备注 git commit -m '备注' 5.将代码推到git上(为了防止...
  • 1. git重新提交 git reset --soft HEAD~n ,撤销最近n个提交,变成add状态,可以重新commit git push -f 强制推送到远程 2. git回滚 git reset --hard HEAD~n ,回滚最近n个提交,代码彻底删除了,找不回来 git push -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,871,017
精华内容 1,148,406
关键字:

提交