(一)
使用Apache Kafka消费者组时,有一个为消费者分配对应分区partition的过程,我们可以使用“自动”subscribe和“手动”assign的方式。
KafkaConsumer.subscribe():为consumer自动分配partition,有内部算法保证topic-partition以最优的方式均匀分配给同group下的不同consumer。
KafkaConsumer.assign():为consumer手动、显示的指定需要消费的topic-partitions,不受group.id限制。
注意:consumer.assign()可以不被消费者的组管理功能管理,他相对于是一个临时的,不提交就不会改变当前group.id的offset(如果consumer.commitSync()或者consumer.commitASync()或者自动提交 还是会影响offset),
比如:在使用consumer.subscribe(Arrays.asList(topicName));时offset为20:
(1) 如果再通过assign方式已经获取了消息后,不提交offset,在下次通过consumer.subscribe(Arrays.asList(topicName));来获取消息时offset还是20,还是会获取20以后的消息。
(2) 如果再通过assign方式已经获取了消息后,提交了offset,,在下次通过consumer.subscribe(Arrays.asList(topicName));来获取消息时offset就变了
(二)metadata
繁杂的调用对象
C++中可以调用的对象有很多,包括但不限于以下
1函数指针
2.仿函数 (重载了"()”运算符)
3可被转换为函数指针的类对象
4类成员函数
问题浮出水面
这些调用对象在使用的时候具有比较统一的时候,但是定义的方式却是五花八门。因此,C++11中为了改善这个问题,提供了std::function和std::bind来解决
std::function
std:function是可调用对象的包装器,本质上是一个类模板,可容纳除了类成员(函数)指针之外的所有可调用对象
std::bind
std:bind用来将可调用对象与其参数一起进行绑定,绑定后的结果可以使用std::function进行保存,并延迟调用
1将可调用对象与其参数一起绑定成一个仿函数
2.将N元可调用对象转换成一元或N-1元可调用对象,即只绑定部分参数
占位符
std:bind可以将函数及其参数进行绑定,那么参数的位置与传入的位置相关,因此有了占位符的概念,例std:placeholders 1是第一个参数的占位符,当函数传入第一个参数的时候,就会把其进行替换,同理std::palceholders:: 2是第二个占位符
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!