- 博客(23)
- 资源 (7)
- 收藏
- 关注
原创 kafka2.0-事物发送(the transactional producer)_10
事务 事务是Kafka 0.11开始引入的新特性。类似于数据库事务,只是这里的数据源是Kafka,kafka事务属性是指一系列的生产者生产消息和消费者提交offset的操作在一个事务,或者说是是一个原子操作),同时成功或者失败。事务入门例子生产者如下,发送两条消息,添加事物的意思就是要么同时发送成功,要么都不成功。/** * 多次生成消息类型的事物 */public class...
2018-09-13 13:27:28 1233
原创 kafka2.0-幂等发送(the idempotent producer)_09
从kafka 0.11版本开始,生成者就支持了两种额外的发送模式 - 幂等发送(the idempotent producer)和事物发送(the transactional producer)。事物发送在后面讲。什么是幂等?(如果已经了解,可跳过) 举个例子:比如用户对订单付款之后,生成了一个付款成功的消息,发送给了订单系统,订单系统接收到消息之后,将订单状态为已付款,后来,订单系统又收到...
2018-09-12 13:45:43 2765 1
原创 kafka2.0-使用protobuf实现序列化_08
上一篇文章中讲了json和jdk的序列化方式,这里讲使用protobuf类序列化protobuf的介绍 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。...
2018-09-09 16:45:34 14218 3
原创 kafka2.0-序列化与反序列化_07
概要:先讲讲kafka中简单的序列化方式,以及实现,然后再使用protobuf实现一个自定义序列化的小程序正如之前文章中写过的例子程序,我们配置的序列化方式都是下面这样的。//生产者的序列化配置props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.p...
2018-09-09 12:44:56 927
原创 kafka-自定义分区器(partitioner)_06
上一篇文章讲了kafka的默认的分区器(DefaultPartitioner)源码,这里我们写一个自定义分区器的小例子生产者代码如下:/** * kafka生产者 * 使用自定义的分片器发送消息 */public class PartitionerProducer { public static final String TOPIC_NAME = "producer-0"...
2018-09-08 16:33:53 1174 1
原创 kafka2.0-producer如何将消息分配到partition中_05
Topic:producer-0 PartitionCount:3 ReplicationFactor:2 Configs: Topic: producer-0 Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1 Topic: producer-0 Partition: 1 Leader: 3 Re...
2018-09-08 12:50:23 3374
原创 kafka-producer基础理论_04
如果你已经了解了kafka的producer基础理论,可以跳过这篇文章Partition & Replicas我创建了一个名为producer-0的topic,partitions的数量为3,每个partitions除了本身之外还有一个副本,如下图。 Topic:producer-0 Partition:0 Leader:2 Replicas:2...
2018-09-07 16:41:56 217
原创 kafka2.0-入门demo_03
上一篇文章简单的讲了搭建kafka的环境以及如何启动。现在来讲讲kafka的简单使用,然后使用java写个小的测试程序。首先假设你已经启动了kafka集群,我们来创建一个topic,使用如下命令:bin/kafka-topics.sh --create --zookeeper 192.168.1.3:2181,192.168.1.128:2181,192.168.130:2181 --...
2018-09-06 21:10:04 1683
原创 kafka2.0-环境搭建_02
声明:我这里搭建的是完全分布式环境,zookeeper使用的是非kafka自带的。(想深入了解kafka,需要先了解zk,如果你对zk有一定了解,那么搭建zk分布式环境将会非常easy)单机环境和伪分布环境可以参见官方文档:http://kafka.apache.org/quickstart 如果不想看英文就看这篇:http://www.tianshouzhi.com/api/tutoria...
2018-09-06 16:32:44 1739
原创 mysql 可重复读。
一、可重复读我们先看看现象,再分析原理。我的mysql版本是5.5。下面是一张表,只有一条数据,并且我开启了事物此时,另一个事物将record加1,因此我在开启一个命令行客户端,执行下面的命令:成功加1之后,实际上,数据库中record肯定是2。然后回到之前的客户端,再查一次:没毛病,record还是1,果然是可重复读。有些人以为mysql的可重复读是通过行锁实...
2018-07-26 15:19:41 4140
原创 看看java源码中那些引人深思的写法_no.1
案例一:在jdk Hashmap的源码中,有一段如下:相信看过Hashmap源码的人都知道,table其实就是hash桶数组,然后每一个桶后面是链表,对于jdk8,过长的情况下为红黑树。但是我们今天关注的重点是transient这个关键字,As you know,被transient修饰的字段不能被序列化。为什么不能被序列化,这个问题跟hashcode有关系。在回答这个问题之前...
2018-07-26 00:10:44 352
原创 记一次sql删除重复数据的经历
来看看问题,表结构如下:可能是前台的代码有问题,表单重复提交,导致同一个用户(user_account)对同一个商品(sku_id)多次提交了重复的内容(content)。现在需要对重复的内容去重,即每一个用户,每一个商品只保留一条不同的内容。条件是: 给定指定的sku_id,(10063,10061,10064)。 保留主键id最大的一条。...
2018-07-24 10:17:28 246
原创 DP(动态规划)入门
谈到动态规划,最经典的当然是背包问题,可以百度下<<背包九讲>>。但是这里不准备从背包问题讲起,主要是觉得用背包问题来讲DP的思想,还不够通俗易懂。先来看一个金典的算法题:爬台阶问题有n个台阶,你每次可以爬1阶或2阶,问:爬到顶总共有多少种爬法?例子: n = 3第一种:1 1 1第二种:2 1第三种:1 2总共有3种爬法。解法一:递归代码如下...
2018-12-05 15:02:57 289
原创 Mysql-由浅入深论行锁
对于mysql innodb的各种锁,这里不采用堆文字的讲解方式,我们来从现象到本质,先看现象,再来说明其中的道理。我使用的是mysql 5.5,默认隔离别-可重复读。建了一张表,如下图:id为主键,student_num上有唯一索引,score分数上有普通索引,name和age没有索引。建表语句如下:CREATE TABLE `student` ( `id` bigint(20)...
2018-10-10 15:22:35 244
原创 从吃鸡中论装饰器模式
在讲装饰器模式之前,我先讲讲代码实例,在讲具体的原理和结构。情景:游戏中经常使用枪(英文:Gun),有手枪(英文:Pistol),狙击枪(英文:SniperRifle)等等。 然后枪有个基本功能,肯定是fire,也许shot更恰当,如果用代码实现,大致如戏:抽象类:枪(Gun)public abstract class Gun { //开火 public abst...
2018-08-27 15:42:29 424
原创 使用LengthFieldBasedFrameDecoder解决复杂的自定义协议-粘包与半包问题
之前做过一个项目,项目中web应用为了与传感器通讯,定义了一整套通讯协议,这里拿最简单的心跳协议来讲,使用netty自带的LengthFieldBasedFrameDecoder解码器来解决粘包与半包问题。 心跳协议如下: 简单说下这个协议,固定值的包头包尾设定,更多的是为了迎合硬件,如果你去看过一下rpc框架的通信协议,比如dubbo,为了使包字节数更少,不会这样。所以站在高效通讯的角度...
2018-08-21 17:02:34 16952 9
原创 kafka-producer如何发送消息
producer如何发送消息首先producer保持着一个与zk的链接,通过这个链接,可以获得当前Topic所有的partition leader所在主机的列表,然后,会选择一台主机,直接发送消息到broker上的leader partition,不需要经过任何中介或其他路由转发。为了实现这个特性,kafka集群中的每个broker都可以响应producer的请求,并返回topic的一些元信息...
2018-08-04 15:58:30 3161
原创 Kafka介绍和原理
Kafka介绍简而言之,kafka是一种mq,现在有很多开源的mq,包括ActiveMq,RokectMq, Rabbitmq和Kafka等等。还有些大型互联网公司内部不开源的MQ,比如阿里巴巴的MetaQ,京东的JMQ等等。Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文...
2018-08-02 16:12:00 275
原创 如何写好一个线程池(java)
在应用中,一个线程池工具类,需要些什么单例,而且是线程安全的单例线程异常处理,当线程在实际执行过程中,如果出现异常,起码得记个log吧线程池的设置,核心线程大小,阻塞队列,最大线程大小/** * 线程池工具类 */public class ThreadPoolUtils { //核心线程数 private static final int CORE_POOL_...
2018-07-30 18:58:52 1145
原创 算法-LeetCode-整数的二进制表示中1的个数
题目输入一个,输出该数二进制表示中1的个数。 其中负数用补码表示。 说明:对于负数的二进制码,比如-1(由于java中int 为4个直接,总共32位,这里方便表示只取8位) 原码:-1=1000 0001 (最高位为符号位,负数用1表示) 反码:-1=1111 1110 (除了最高位的符号位,其余的全部取反) 补码:-1=1111 1111 (把反码加一,则为补码) ...
2018-07-30 16:03:29 2164
原创 算法-LeetCode-跳台阶
题目一一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) 解法:这题的解法,主要思路是递归,首先假设第一次跳1级,那么剩下的n-1级的跳法是多少种? 不知道,但是我们假设是x种跳法,如果第一次跳2级,我们同样假设剩下的n-2中跳法有y种。x+y就是总数。那么现在的问题就变成了, 求该青蛙跳上一个n-1级的台阶总共有多少...
2018-07-30 15:09:21 2284
原创 使用git bash管理你的代码
之前在一家创业公司工作,由于my head一直用git bash来管理代码,而不喜欢用图形化的工具,受之影响,所以一直以来都习惯了敲命令来解决。这里就由浅入深的讲讲使用命令在玩git。git clone 毫无疑问,第一步肯定是下载代码(git config自己的email和username就不讲了)github上面有很多的开源项目,这里找的是java算法实现的一个开源项目。地...
2018-07-23 21:16:20 1007
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人