zoukankan      html  css  js  c++  java
  • Kafka使用多个分区时 consumer的Assign配置

    天天在给自己挖坑排坑。。。

    因为要开多线程消费,所以分区加到了10,两个broker。

    Producer没有做特殊处理,所以是随机发到Partitions。

    但是Consumer只做Subscribe订阅的话,会只消费到Partition = 0 的消息。

    因此看了一下有个Assign可以绑定分区和topic。

    但是只使用TopiicPartition的话,只能配置成功但是消费不成功,尝试加Subscribe后还是只能消费到partition=0的分区消息。

    最后考虑是不是因为offset的问题。

    使用Assign(TopicPartitionOffset)之后,成功消费到对应分区对应消息。

    (12.13改 关于subscribe只消费到0分区的原因是 当前分区多个,但是消费者只有一个,因此即使rebalance,还是只能消费到一个分区)

    另外关于kafka消费的问题,因为要控制消费的线程数,长时间跑的线程又不太方便用线程池(原因:线程池为了判断是否需要创建一个额外的线程,所采用的逻辑比较复杂,直接为长时间运行的任务创建专用线程,就可以避免这个问题。),所以直接开了n个线程来消费。

    这样的情况下,如果是单例的消费者,对应单个分区是没有问题的,取消息是排队的,但是处理消息还是可以并发的。

    另外还有一种方案,就是多个分区对应多个消费者。开多个线程跑。

    啊,这里我还查了lambda表达式的匿名传参,大概格式如下

    1 kafkaThread[i] = new Thread(delegate (object obj)
    2 {
    3    //线程代码  
    4 };

    此外在测两种方案的QPS,消费平滑度等性能的时候,需要在线程里设置count++,因此又学了一个知识点。

    用Interlocked 就可以做到++的原子操作了,代码如下:

    1 private static int _countConsume = 0;
    2 
    3 Interlocked.Increment(ref _countConsume);

    都是属于自己学习之路上的干货,记录一下。

    昨天晚上加班的比较晚,后来老大来跟我聊了一会儿。聊得东西很多,我本人毕业院校不太好,组里小哥哥是中科大的。所以我当时感到压力挺大,然后老大就跟我讲了一些关于学校里和工作后的区别。

    顺带讲了方法论和工具是什么,告诉我怎么去使用一项技术,工作和科研的区别(技术与业务的结合性)。

    感觉我老大是人超好的那种,他的境界是我所仰望的,讲真毕业第一份工作有这样一位老大带着,我感觉非常幸运,希望我可以在他带的团队里,学到更多的东西,早日可以独当一面。

  • 相关阅读:
    深入入门正则表达式(java) 匹配原理 2 回溯
    java实现sftp实例
    自定义注解
    java构造器
    Does the parameter type of the setter match the return type of the getter?
    JAVA经典算法40题(18)
    关于session的详细解释
    .net上传功能fileupload代码
    ContentUris类使用介绍
    java回顾之类初级
  • 原文地址:https://www.cnblogs.com/sylvialucy/p/7771886.html
Copyright © 2011-2022 走看看