使用者小组 使得许多进程的多台机器 在逻辑上作为一个单个的使用者 出现。

我们使用中,一种常见的情况是,我们按照逻辑划分出多个使用者小组,每个小组都是有作为一个逻辑整体的多台使用者计算机组成的集群。

consumer group 设计的目的之一也是为了应用多线程同时去消费一个topic中的数据

使用者API

我们有两个层次的使用者API。
 底层比较简单的API维护了一个同单个代理建立的还接,完全同収送给服务器的网绚请求相吻合。该API完全是无状态的,每个请求都带有一个偏秱量作为参数,仍而允许用户以自己选择的仸意方式维护该元数据。
高层API对使用者隐藏了代理的具体细节,使用者可运行于集群中的机器上而无需关心底层的拓扑结构。它维护着数据使用的状态。高局API迓提供了订阅同一个过滤表达式(例如,白名单或黑名单的正则表达式)相匹配的多个话题的能力。

高层api

 该API的中心是一个由KafkaStream返个类实现的迭代器(iterator)。每个KafkaStream都代表着一个仍一个戒多个分区刡一个戒多个服务器的消息流。每个流都是使用单个线程迕行处理的,所以,该API的使用者在该API的创建调用中可以提供所需的仸意个数的流。返样,一个流可能会代表多个服务器分区的合幵(同处理线程的数目相同),但每个分区叧会把数据収送给一个流中。
 createMessageStreams方法为使用者注册刡相应的话题乀上,返将导致需要对使用者/代理的分配情冴迕行重新平衡。为了将重新平衡操作减少刡最小。该API鼓励在一次调用中就创建多个话题流。createMessageStreamsByFilter方法为収现同其过滤条件想匹配的话题(额外地)注册了多个监规器(watchers)。应该注意,createMessageStreamsByFilter方法所迒回的每个流都可能会对多个话题迕行迭代(比如,在满赼过滤条件的话题有多个的情冴下)。

kafka consumer group总结

kafka消费者api分为high api和low api,目前上述demo是都是使用kafka high api,高级api不用关心维护消费状态信息和负载均衡,不用关心offset。

高级api的一些注意事项:

3,增减consumer,broker,partition会导致rebalance,所以rebalance后consumer对应的partition会发生变化

4,获取不到数据时,会block的

2,consumer group 通过zookeeper来消费kafka集群中的消息(这个过程由zookeeper进行管理);

相对于low api自己管理offset,high api把offset的管理交给了zookeeper,但是high api并不是消费一次就在zookeeper中更新一次,而是每间隔一个(默认1000ms)时间更新一次offset,可能在重启消费者时拿到重复的消息。此外,当分区leader发生变更时也可能拿到重复的消息。因此在关闭消费者时最好等待一定时间(10s)然后再shutdown。

例子:

    1. import kafka.consumer.ConsumerIterator;
    2. import kafka.consumer.KafkaStream;
    3. public class ConsumerTest implements Runnable {
    4. private KafkaStream m_stream;
    5. private int m_threadNumber;
    6. public ConsumerTest(KafkaStream a_stream, int a_threadNumber) {
    7. m_threadNumber = a_threadNumber;
    8. m_stream = a_stream;
    9. }
    10. public void run() {
    11. ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
    12. while (it.hasNext())
    13. System.out.println("Thread " + m_threadNumber + ": " + new String(it.next().message()));
    14. System.out.println("Shutting down Thread: " + m_threadNumber);
    15. }
    16. }
    17. //配置连接zookeeper的信息
    18. private static ConsumerConfig createConsumerConfig(String a_zookeeper, String a_groupId) {
    19. Properties props = new Properties();
    20. props.put("zookeeper.connect", a_zookeeper);        //zookeeper连接地址
    21. props.put("group.id", a_groupId);           //consumer group的id
    22. props.put("zookeeper.session.timeout.ms", "400");
    23. props.put("zookeeper.sync.time.ms", "200");
    24. props.put("auto.commit.interval.ms", "1000");
    25. return new ConsumerConfig(props);
    26. }
    27. //建立一个消费者线程池
    28. public void run(int a_numThreads) {
    29. Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
    30. topicCountMap.put(topic, new Integer(a_numThreads));
    31. Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
    32. List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic);
    33. // now launch all the threads
    34. //
    35. executor = Executors.newFixedThreadPool(a_numThreads);
    36. // now create an object to consume the messages
    37. //
    38. int threadNumber = 0;
    39. for (final KafkaStream stream : streams) {
    40. executor.submit(new ConsumerTest(stream, threadNumber));
    41. threadNumber++;
    42. }
    43. }
    44. //经过一段时间后关闭
    45. try {
    46. Thread.sleep(10000);
    47. } catch (InterruptedException ie) {
    48. }
    49. example.shutdown();

kafka consumer 代码示例的更多相关文章

  1. kafka consumer代码梳理

    kafka consumer是一个单纯的单线程程序,因此相对于producer会更好理解些.阅读consumer代码的关键是理解回调,因为consumer中使用了大量的回调函数.参看kafka中的回调 ...

  2. 使用kafka consumer api时,中文乱码问题

    使用Intelli idea调试kafka low consumer时,由于broker存储的message有中文, idea中console端是可以正确显示的 然后mvn package打包到服务器 ...

  3. kafka consumer 0.8.2.1示例代码

    package test_kafka; import java.util.ArrayList; import java.util.HashMap; import java.util.List; imp ...

  4. kafka集群和zookeeper集群的部署,kafka的java代码示例

    来自:http://doc.okbase.net/QING____/archive/19447.html 也可参考: http://blog.csdn.net/21aspnet/article/det ...

  5. java实现Kafka的消费者示例

    使用java实现Kafka的消费者 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...

  6. Apache Kafka(九)- Kafka Consumer 消费行为

    1. Poll Messages 在Kafka Consumer 中消费messages时,使用的是poll模型,也就是主动去Kafka端取数据.其他消息管道也有的是push模型,也就是服务端向con ...

  7. 【原创】Kafka Consumer多线程实例

    Kafka 0.9版本开始推出了Java版本的consumer,优化了coordinator的设计以及摆脱了对zookeeper的依赖.社区最近也在探讨正式用这套consumer API替换Scala ...

  8. 【原创】kafka consumer源代码分析

    顾名思义,就是kafka的consumer api包. 一.ConsumerConfig.scala Kafka consumer的配置类,除了一些默认值常量及验证参数的方法之外,就是consumer ...

  9. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

随机推荐

  1. el-checkbox根据是否被选中执行不同的操作

    直接给el-checkbox绑定点击事件是没有效果的,因为它会被解析成其他形式的html,el-checkbox只是一个类名,因此,使用ts和jquery动态绑定事件: mounted() { $(& ...

  2. 使用POI操作Excel

    首先要下载所需jar包, 官网:http://poi.apache.org ,POI支持office的所有版本 下载完后,打开“poi-bin-3.10.1-20140818”获取操作excel需要的 ...

  3. 【AtCoder ARC076】F Exhausted? 霍尔定理+线段树

    题意 N个人抢M个椅子,M个椅子排成一排 ,第i个人只能坐[1,Li]∪[Ri,M],问最多能坐多少人 $i$人连边向可以坐的椅子构成二分图,题意即是求二分图最大完美匹配,由霍尔定理,答案为$max( ...

  4. 【bzoj1797】[Ahoi2009]Mincut 最小割 网络流最小割+Tarjan

    题目描述 给定一张图,对于每一条边询问:(1)是否存在割断该边的s-t最小割 (2)是否所有s-t最小割都割断该边 输入 第一行有4个正整数,依次为N,M,s和t.第2行到第(M+1)行每行3个正 整 ...

  5. word公式编辑中的转义字符

    Some of the commonly used symbols:      \infty - Infinity      \leq - Less then or equal      \geq - ...

  6. Codeforces Round #520 (Div. 2) A. A Prank

    A. A Prank time limit per test   1 second memory limit per test    256 megabytes 题目链接:https://codefo ...

  7. 单个回调函数中返回多个Request以及Item

    import scrapy from myproject.items import MyItem class MySpider(scrapy.Spider): name = 'example.com' ...

  8. linux 端口号、进程id、杀进程、查询tcp的连接(各种状态的)

    sudo netstat -antupkill -s 9 50713netstat -n | grep 61616netstat -n | awk '/^tcp/ {++S[$NF]} END {fo ...

  9. [bzoj1208][HNOI2004]宠物收养所——splay

    题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...

  10. hdu 1399 Starship Hakodate-maru (暴力搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1399 题目大意:找到满足i*i*i+j*(j+1)*(j+2)/6形式且小于等于n的最大值. #inc ...