コンシューマーグループを使用してログデータを消費する場合、Simple log Serviceの実装、コンシューマー間の負荷分散、発生する可能性のあるフェイルオーバーなどの要因を考慮する必要はありません。 ログデータの消費中にビジネスロジックに集中できます。 このトピックでは、コンシューマーグループを作成、変更、クエリ、および削除する方法について説明し、サンプルコードを提供します。
前提条件
RAM (Resource Access Management) ユーザーが作成され、必要な権限がRAMユーザーに付与されます。 詳細については、「RAMユーザーの作成とRAMユーザーへの権限付与」をご参照ください。
ALIBABA_CLOUD_ACCESS_KEY_IDおよびALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数が設定されています。 詳細については、「環境変数の設定」をご参照ください。
重要Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 RAMユーザーのAccessKeyペアを使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりすることを推奨します。
プロジェクトコードにAccessKey IDまたはAccessKey secretを保存しないことを推奨します。 そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
Simple Log Service SDK for Javaがインストールされています。 詳細については、「Simple Log Service SDK For Javaのインストール」をご参照ください。
ログはLogstoreに書き込まれ、Logstoreのインデックス作成が有効になっています。 詳細については、「Logstoreの作成に使用されるサンプルコード」および「インデックスの作成」をご参照ください。
使用上の注意
この例では、中国 (杭州) リージョンのパブリックSimple Log Serviceエンドポイントが使用されています。これは https://cn-hangzhou.log.aliyuncs.com
です。 プロジェクトと同じリージョンにある他のAlibaba Cloudサービスを使用してSimple Log Serviceにアクセスする場合は、内部のSimple Log Serviceエンドポイント ( https://cn-hangzhou-intranet.log.aliyuncs.com
) を使用できます。 Simple Log Serviceのサポートされているリージョンとエンドポイントの詳細については、「エンドポイント」をご参照ください。
コンシューマーグループの作成に使用されるサンプルコード
次のサンプルコードは、ali-test-consumergroupという名前のコンシューマグループを作成する方法の例を示しています。
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.ConsumerGroup;
import com.aliyun.openservices.log.exception.LogException;
public class CreateConsumerGroup {
public static void main(String[] args) throws LogException {
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
String projectName = "ali-test-project";
// The name of the Logstore.
String logstoreName = "ali-test-logstore";
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
// The name of the consumer group.
String consumerGroupName = "ali-test-consumergroup2";
System.out.println("ready to create consumergroup");
ConsumerGroup consumerGroup = new ConsumerGroup(consumerGroupName, 300, true);
client.CreateConsumerGroup(projectName, logstoreName, consumerGroup);
System.out.println(String.format("create consumergroup %s success", consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
期待される結果:
ready to create consumergroup
create consumergroup ali-test-consumergroup success
コンシューマーグループの変更に使用されるサンプルコード
次のサンプルコードは、ali-test-consumergroupコンシューマーグループを変更する方法の例を示しています。
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
public class UpdateConsumerGroup {
public static void main(String[] args) throws LogException {
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
String projectName = "ali-test-project";
// The name of the Logstore.
String logstoreName = "ali-test-logstore";
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "ali-test-consumergroup";
System.out.println("ready to update consumergroup");
// Change the timeout period of the consumer group to 350 seconds.
client.UpdateConsumerGroup(projectName, logstoreName, consumerGroupName, false, 350);
System.out.println(String.format("update consumergroup %s success", consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
期待される結果:
ready to update consumergroup
update consumergroup ali-test-consumergroup success
すべての消費者グループのクエリに使用されるサンプルコード
次のサンプルコードは、指定されたLogstoreのすべてのコンシューマーグループをクエリする方法の例を示しています。
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.ConsumerGroup;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.ListConsumerGroupResponse;
public class ListConsumerGroup {
public static void main(String[] args) throws LogException {
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
String projectName = "ali-test-project";
// The name of the Logstore.
String logstoreName = "ali-test-logstore";
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
System.out.println("ready to list consumergroup");
// Query all consumer groups of the Logstore.
ListConsumerGroupResponse response = client.ListConsumerGroup(projectName,logstoreName);
for(ConsumerGroup consumerGroup : response.GetConsumerGroups()){
System.out.println("ConsumerName is : " + consumerGroup.getConsumerGroupName());
}
System.out.println(String.format("list consumergroup from %s success",projectName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
期待される結果:
ready to list consumergroup
ConsumerName is : ali-test-consumergroup2
ConsumerName is : ali-test-consumergroup
list consumergroup from ali-test-project success
コンシューマーグループの削除に使用されるサンプルコード
次のサンプルコードは、指定したプロジェクト内のコンシューマーグループを削除する方法の例を示しています。
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
public class DeleteConsumerGroup {
public static void main(String[] args) throws LogException {
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
String projectName = "ali-test-project";
// The name of the Logstore.
String logstoreName = "ali-test-logstore";
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "ali-test-consumergroup";
System.out.println("ready to delete consumergroup");
// Delete the consumer group.
client.DeleteConsumerGroup(projectName,logstoreName,consumerGroupName);
System.out.println(String.format("delete consumergroup %s success",consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
期待される結果:
ready to delete consumergroup
delete consumergroup ali-test-consumergroup success
コンシューマーグループのチェックポイントを取得するために使用されるサンプルコード
次のサンプルコードは、指定したコンシューマーグループのチェックポイントを取得する方法の例を示しています。
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.GetCheckPointResponse;
public class GetCheckPoint {
public static void main(String[] args) throws LogException {
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
String projectName = "ali-test-project";
// The name of the Logstore.
String logstoreName = "ali-test-logstore";
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "consumerGroupX";
System.out.println("ready to get consumergroup checkpoint");
// Obtain a checkpoint of the consumer group for a shard.
GetCheckPointResponse response1 = client.getCheckpoint(projectName,logstoreName,consumerGroupName,0);
GetCheckPointResponse response2 = client.getCheckpoint(projectName,logstoreName,consumerGroupName,1);
System.out.println("The checkpoint of Shard 0 is : " + response1.getCheckpoint());
System.out.println("The checkpoint of Shard 1 is : " + response2.getCheckpoint());
System.out.println(String.format("get consumergroup %s checkpoint success",consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
期待される結果:
ready to get consumergroup checkpoint
The checkpoint of Shard 0 is : ConsumerGroupShardCheckPoint [shard=0, checkPoint=MTY2NzgxMDc0Nzk5MDk5MzAyMg==, updateTime=1668750821709044, consumer=consumer_1]
The checkpoint of Shard 1 is : ConsumerGroupShardCheckPoint [shard=1, checkPoint=MTY2NzgxMDc0Nzk5MTk0NTU0NQ==, updateTime=1668750828790425, consumer=consumer_1]
get consumergroup consumerGroupX checkpoint success
コンシューマーグループのチェックポイントを更新するために使用されるサンプルコード
次のサンプルコードは、指定したコンシューマーグループのチェックポイントを更新する方法の例を示しています。
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.ConsumerGroup;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.response.ListConsumerGroupResponse;
public class ConsumerGroupUpdateCheckpoint {
public static void main(String[] args) throws LogException {
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
String projectName = "ali-test-project";
// The name of the Logstore.
String logstoreName = "ali-test-logstore";
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
String host = "https://cn-hangzhou.log.aliyuncs.com";
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
try {
String consumerGroupName = "consumerGroupX";
System.out.println("ready to update checkpoint");
// Query all consumer groups of the Logstore.
ListConsumerGroupResponse response = client.ListConsumerGroup(projectName, logstoreName);
for(ConsumerGroup consumerGroup : response.GetConsumerGroups()){
System.out.println("ConsumerName is : " + consumerGroup.getConsumerGroupName());
System.out.println("Consumer order is : " + consumerGroup.isInOrder());
}
// Update the checkpoint of Shard 0. You can call the GetCursor operation to query a cursor based on a specified point in time.
client.UpdateCheckPoint(projectName, logstoreName, consumerGroupName, 0, "MTY2NzgxMDc0Nzk5MTAwNjQ3Mg==");
System.out.println(String.format("update checkpoint of %s success", consumerGroupName));
} catch (LogException e) {
System.out.println("LogException e :" + e.toString());
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
throw e;
}
}
}
期待される結果:
ready to update checkpoint
ConsumerName is : consumerGroupX
Consumer order is : false
ConsumerName is : ali-test-consumergroup2
Consumer order is : true
ConsumerName is : ali-test-consumergroup
Consumer order is : false
update consumergroup checkpoint is:consumerGroupX
update checkpoint of consumerGroupX success
関連ドキュメント
APIを呼び出した後、Log Serviceによって返された応答にエラー情報が含まれている場合、呼び出しは失敗します。 API呼び出しが失敗したときに返されるエラーコードに基づいてエラーを処理できます。 詳細については、エラーコードをご参照ください。
Alibaba Cloud OpenAPI Explorerは、デバッグ機能、SDK、サンプル、および関連ドキュメントを提供します。 OpenAPI Explorerを使用して、リクエストを手動でカプセル化したり署名したりすることなく、Log Service API操作をデバッグできます。 詳細については、をご覧ください。 OpenAPIポータル。
Log Serviceは、Log Serviceの自動設定の要件を満たすコマンドラインインターフェイス (CLI) を提供します。 詳細については、「Log Service CLI」をご参照ください。
コンシューマーグループ関連のAPI操作の詳細については、以下のトピックを参照してください。
サンプルコードの詳細については、GitHubの「Alibaba Cloud Log Service SDK For Java」をご参照ください。