Kafka的zookeeper是怎么管理
管理broker、consumer
创建Broker后,向zookeeper注册新的broker信息,实现在服务器正常运行下的水平拓展。具体的,通过注册watcher,获取partition的信息。
Topic的注册,zookeeper会维护topic与broker的关系,通过/brokers/topics/topic.name节点来记录。
Producer向zookeeper中注册watcher,了解topic的partition的消息,以动态了解运行情况,实现负载均衡。Zookeepr是没有管理producer,只是能够提供当前broker的相关信息。
Consumer可以使用group形式消费kafka中的数据。所有的group将以轮询的方式消费broker中的数据,具体的按照启动的顺序。Zookeeper会给每个consumer group一个ID,即同一份数据可以被不同的用户ID多次消费。因此这就是单播与多播的实现。以单个消费者还是以组别的方式去消费数据,由用户自己去定义。Zookeeper管理consumer的offset跟踪当前消费的offset.
Kafka的zookeeper同样利用controller来选择出leader来,有着failover的功能,但是用户在连接的时候,必须利用watcher来获知当前的broker的信息,发布信息到指定的Topic,甚至利用算法将信息发布到指定的partition中,在mongodb中数据具体存储在哪个shard,我们是不用去处理。如果broker已经失效,producer需要自己实现负载均衡。
你用的spark的版本
关于SQL的事务
事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。
二、事务属性
事务4大属性:
1 原子性(Atomicity):事务是一个完整的操作。
2 一致性(Consistency):当事务完成时,数据必须处于一致状态。
3 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。
4 持久性(Durability):事务完成后,它对于系统的影响是永久性的。
三、创建事务
T-SQL中管理事务的语句:
1 开始事务: begin transaction
2 提交事务:commit transaction
3 回滚事务: rollback transaction
事务分类:
1 显式事务:用begin transaction明确指定事务的开始。
2 隐性事务:打开隐性事务:set implicit_transactions on,当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
3 自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。
关于Java资源池http://blog.sina.com.cn/s/blog_6705d0400100qcvg.html
资源池管理一组被回收以重复使用的活动资源。单个应用程序或者服务器会话不再需要垄断某个特定的数据库连接以避免连接的初始化开销。取而代之的是,不论何时,它需要存取这个数据库时就从全局池中借一个连接。只要这个应用程序或者会话代码正在使用这个连接,其它应用程序或者会话就不能够访问它。当它完成了其数据库工作,这个应用程序或者会话代码将这个连接还回到池中以便其它的程序使用。
如果一个客户端从池中请求一个资源,并且没有一个可用,那么创建一个新的资源是资源池的责任。这使应用程序容易并且高效地获得对新资源的存取,而不必有任何对是否是回收的资源还是全新的资源的顾虑。
应用性
在下列时候使用资源池:
• 你的应用程序需要重复地打开或者关闭吃始化起来很慢的数据库资源。
• 保持资源打开一段较大的间隔并不会给并发性带来负面的影响。资源池保持资源打开,以便它们可以被回收。
结构
SQL中where与having区别
having 和where 都是用来筛选用的
having 是筛选组 而where是筛选记录
他们有各自的区别
1.当分组筛选的时候 用having
2.其它情况用where
-----------------------------------------------------
用having就一定要和group by连用,
用group by不一有having (它只是一个筛选条件用的)