小编ANK*_*AVA的帖子

Kafka Producer将消息发布到单个分区

我是 Kafka 的新手,正在阅读可用的官方文档。

在我的本地系统上,我已经启动了一个卡夫卡实例和动物园管理员。Zookeper 和 kafka 服务器都在默认端口上运行。

我创建了一个主题“test”,复制因子为 1,因为我只有一个 kafka 实例启动并运行。

除此之外,我还创建了两个分区。

我有两个消费者在同一消费者组中订阅了该队列。

现在我已经在 Windows 机器上使用命令提示符启动消费者。

当我从命令提示符启动生产者并将消息发布到主题时,一切正常。Kafka 使用循环法将消息推送到两个分区,并且每个消费者交替接收消息,因为每个消费者都在监听不同的分区。

但是,当我使用 java kafka-client jar 创建生产者时,即使我对消息使用不同的密钥,生产者也会将所有消息推送到同一个分区,因为所有消息都在同一个消费者上接收。

分区不是静态的,而且每次我运行生产者时它都会不断变化。

我尝试了与从命令提示符启动的生产者相同的场景,其配置与我使用 java 代码向 kafka-client 生产者提供的配置完全相同。命令提示符生成器似乎工作正常,但代码生成器将所有消息推送到同一分区。

我尝试更改某些消息的密钥,希望代理将其发送到不同的分区,因为文档中提到代理使用消息的密钥路由消息。

public class KafkaProducerParallel {


public static void main(String[] args) throws InterruptedException, 
ExecutionException {

    Properties properties = new Properties();
    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, 
"localhost:9092");
    properties.put(ProducerConfig.CLIENT_ID_CONFIG, "parallelism- 
 producer");
    properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, 
 StringSerializer.class);
    properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, 
LongSerializer.class);


    Producer<String, Long> parallelProducer = new KafkaProducer<> 
(properties);

    for(long i=0;i<100;i++) {

        ProducerRecord<String, Long> producerRecord;

        if(i<50) {
            producerRecord = new ProducerRecord<String, 
 Long>("second-topic", "Amoeba", i);
        }else …
Run Code Online (Sandbox Code Playgroud)

java apache-kafka kafka-producer-api

7
推荐指数
2
解决办法
1万
查看次数

即使在java中对象的状态相同,equals也给出false

我的代码看起来有点像这样:

public class EqualityTrial {

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    EqualityTrail1 obj1 = new EqualityTrail1();
    obj1.setName("Ankit");
    obj1.setAge(23);
    EqualityTrail1 obj2 = new EqualityTrail1();
    obj2.setName("Ankit");
    obj2.setAge(23);

    if(obj1 == obj2){
        System.out.println("== gave true");
    }else{
        System.out.println("== gave false");
    }
    if(obj1.equals(obj2)){
        System.out.println("equals gave true");
    }else{
        System.out.println("equals gave false");
    }

  }

}
Run Code Online (Sandbox Code Playgroud)

每次条件都是假的.我知道==比较引用是否指向同一个对象,在这种情况下不是那么假是正确的结果但是在'equals'方法的情况下,据我所知它比较两个对象的状态...如果状态同样的方法应该返回true,即使两个对象的状态相同,在这种情况下返回false.我错过了什么吗?

java

0
推荐指数
1
解决办法
1140
查看次数

apigee 的目标端点是什么?

任何人都可以向我解释一下 apigee 的目标终点是什么吗?与虚拟主机有关吗?

我尝试浏览 apigee 文档和社区,但没有发现任何有用的东西

apigee

0
推荐指数
1
解决办法
3146
查看次数

标签 统计

java ×2

apache-kafka ×1

apigee ×1

kafka-producer-api ×1