如果我有一个类和一个辅助类来执行它的一些功能,那么将它作为内部类是否有意义.
public class Foo {
private FooHelper helper;
// constructor & any other logic
public void doSomeThing() {
helper.do();
}
}
public class FooHelper {
public void do() {
// code
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,将内容FooHelper作为一个内部类是否有意义?道歉,如果这听起来很愚蠢,但我对用例感到困惑.
我是kafka的新手,如果我听起来很愚蠢,但我到目前为止所理解的是......消息流可以被定义为一个主题,就像一个类别.并且每个主题分为一个或多个分区(每个分区可以有多个副本).所以他们并行行事
他们说,从卡夫卡主要网站
生产者能够选择将哪个消息分配给主题中的哪个分区.这可以通过循环方式完成,只是为了平衡负载,或者可以根据一些语义分区功能(例如基于消息中的某些键)来完成.
这是否意味着消费我将能够从特定分区中选择消息偏移量?运行多个分区时,是否可以从一个特定分区中选择,即分区0?
他们说,在卡夫卡0.7 快速启动
发送带分区键的消息.具有相同密钥的消息将发送到同一分区.
并且可以在创建生产者时提供密钥,如下所示
ProducerData<String, String> data = new ProducerData<String, String>("test-topic", "test-key", "test-message");
producer.send(data);
Run Code Online (Sandbox Code Playgroud)
现在我如何根据此密钥使用消息?在Kafka制作时使用此键的实际影响是什么?
在0.8beta中创建生产者时,我们可以通过配置文件提供分区器类属性.可以创建自定义分区器类来实现kafka分区器接口.但有点混淆它是如何工作的.0.8 doc也没有解释太多.有什么建议或mi遗失的东西?
在卡夫卡0.8beta可以使用类似下面的命令提到要创建的主题在这里
bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 2 --partition 3 --topic test
Run Code Online (Sandbox Code Playgroud)
上面的命令将创建一个名为"test"的主题,每个分区有3个分区和2个副本.
我可以使用Java做同样的事情吗?
到目前为止,我发现使用Java我们可以创建一个生产者,如下所示
Producer<String, String> producer = new Producer<String, String>(config);
producer.send(new KeyedMessage<String, String>("mytopic", msg));
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为"mytopic"的主题,其中包含使用"num.partitions"属性指定的分区数并开始生成.
但有没有办法定义分区和复制呢?我找不到任何这样的例子.如果我们不能这样做意味着我们总是需要先创建包含分区和复制的主题(根据我们的要求),然后使用生产者在该主题中生成消息.例如,如果我想以相同的方式创建"mytopic"但是具有不同的分区数(覆盖num.partitions属性)是可能的吗?
消息被消费或处理后,如何从Kafka获得确认.可能听起来很愚蠢,但有没有办法知道收到确认的消息的开始和结束偏移量?
我是Kafka的新手,我对消费者的理解是基本上有两种类型的实现.
1)高级消费者/消费者群体
2)简单消费者
关于高级抽象的最重要部分是当Kafka不关心处理偏移时使用,而Simple消费者提供了对偏移管理更好的控制.令我困惑的是,如果我想在多线程环境中运行使用者并且还希望控制偏移量.如果我使用消费者组,这意味着我必须读取存储在zookeeper中的最后一个偏移量?这是我唯一的选择.