0%

协调器

kafka有消费者协调器、组协调器和任务管理协调器

消费者协调器ConsumerCoordinator

每个KafkaConsumer实例化时都会实例化一个ConsumerCoordinator对象,负责同一个消费组下各消费者与服务端组协调器之间的通信,向组协调器提交加入消费组、离开消费组以及提交消费偏移量等请求

组协调器GroupCoordinator

每个KafkaServer启动时都会创建一个GroupCoordinator实例,用于管理消费组和该消费组下各消费者的消费偏移量以及消费者再平衡,负责对组内消费者提交的相关请求进行处理,同时管理与之连接的消费偏移量的提交,将每个消费者偏移量保存在kafka的内部主题当中

阅读全文 »

讲mybatis主键生成之前,先说一下原生的主键回填吧。

原生写法

原生的需要在创建PreparedStatement时指定主键回填,Statement.RETURN_GENERATED_KEYS

1
2
PreparedStatement statement = connection.prepareStatement("insert into adx_material (adx_template_id,type) values (?,?)",
Statement.RETURN_GENERATED_KEYS)

这样在返回的结果集中就会将主键返回

1
2
ResultSet rs = statement.getGeneratedKeys();
long id = rs.getLong(1);

mybatis主键回填

默认情况下,mybatis的insert语句不会返回自动生成的主键,而是返回插入的条数,如果需要获取到产生的自增主键,可以使用KeyGenerator接口

阅读全文 »

tomcat嵌入式

Tomcat7开始支持嵌入式功能,增加了一个启动类org.apache.catalina.startup.Tomcat

先来看个例子

示例

示例一:映射servlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) throws LifecycleException {
Tomcat tomcat = new Tomcat();
Context context = tomcat.addContext("/test",null);
Tomcat.addServlet(context, "helloServlet", new HttpServlet() {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
res.getWriter().write("Hello World!!!");
}
});
context.addServletMappingDecoded("/hello","helloServlet");
tomcat.init();
tomcat.start();
// 阻塞主程序结束
tomcat.getServer().await();
}

访问127.0.0.1:8080/test/hello即可

阅读全文 »

副本管理器

kafka中的副本机制使得整个集群只要保证至少有一个副本存活就不会影响整个集群的工作,大大提高了kafka集群的可用性。

在所有副本节点中,有一个节点作为Leader负责接收客户端的读写操作,其他副本节点作为Follower从Leader节点复制数据进行数据同步

ReplicaManager副本管理器负责对副本管理,主要包括对控制器发送的StopReplicaRequest、UpdateMetadataRequest、以及LeaderAndIsrRequest进行处理,维护副本ISR变化以及Follower与Leader数据同步的管理

阅读全文 »

性能调优

性能测试

负载测试

阅读全文 »